【问题标题】:HttpResponse's content's length doesn't match the plain textHttpResponse 的内容长度与纯文本不匹配
【发布时间】:2019-12-15 01:02:48
【问题描述】:

我正在使用 HttpRequestMessage/HttpResponseMessage 进行发布请求。一切正常,我将响应转换为长度正确的字符串,但如果我想显示原始字符串,它只返回一个问号字符(?),没有别的,好像输出只是一/两个字符的长度。

我尝试将字符串解码为 UTF8,还是一样。

这是我的代码:

var targetUrl = new Uri("https://www.targetUrl.com/");
var postData = GetPostData;
var request = httpClientHelp.GetRequest(HttpMethod.Post, targetUrl, postData);
var response = Await httpRequestProcess.SendAsync(request);
var data = Await response.Content.ReadAsStringAsync();
Debug.WriteLine(data.Length); // Correct, i.e. 5686
Debug.WriteLine(data); // Just displays "?"

//。这是 httpRequestProcess 类中的 SendAsync 函数:

public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage requestMessage)
{
    var response = await Client.SendAsync(requestMessage);
    return response;
}

Here is the raw string result

Here is the difference between the string content and its length

如果我复制那个问号,输出是多组未知字符,例如: � �

【问题讨论】:

  • 试试Convert.FromBase64String(data);
  • 这行不通,阿南特。它与字符串混淆并引发异常。
  • 这是一个很长的字符串。字符串的长度与我预期的响应相匹配。
  • 我认为这正是 Fiddler 在解码响应之前显示的结果:prntscr.com/opizvi/direct 但是我如何像 Fiddler 那样对其进行解码呢?这是什么类型的编码?
  • @SachinVishwakarma 我解决了这个问题。将立即更新我的主题。

标签: c# httpresponsemessage


【解决方案1】:

感谢@SachinVishwakarma,我能够解决这个问题。标头上的默认编码是“gzip, deflate, br”,如 Fiddler 中所示。我所要做的就是使用 HttpClientHandler 初始化 HttpClient,其 AutomaticDecompression 属性针对所有压缩方法进行了优化。

例子:

    var _httpHandler = new HttpClientHandler() { CookieContainer = new System.Net.CookieContainer(), AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.None };
    var _httpClient = new HttpClient(_httpHandler);

谢谢你们帮助我!

【讨论】:

    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 2018-02-22
    • 2021-06-30
    • 1970-01-01
    相关资源
    最近更新 更多