Как получить контент в UTF8 из кодировки передачи в C # HttpClient? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть код, который отправляет HttpRequest и получает JSON в строке. Код работает нормально, но он содержит ромб и нечитаемую строку при запуске сервера sending tranfer-encoding chunked response Я пытался использовать буфер и читать текст в stringBuilder, но он не работает хорошо. Я прочитал в каком-то ответе, что HttpWebRequest устарел, и я должен использовать HttpClient. Я переписал свой код в HttpClient, но проблема остается той же. Я открываю URL в браузере, и он работает нормально, загрузка заняла несколько секунд, и я не увидел кодировку передачи Chunked.

Пожалуйста, проверьте код,

        HttpClientHandler handler = new HttpClientHandler();
        handler.CookieContainer = cookies;

        var client = new HttpClient(handler);

        var ans = client.GetAsync(strURL).Result;
        var resStream = ans.Content.ReadAsStringAsync().Result;

Я применил 8192-байтовый буфер и прочитал из SO, не работает с этим кодом и пробовал много кода из SO за последние несколько часов. Пожалуйста, проверьте, что не так в моем коде. можно ли в заголовке установить что-то простое, сказать «нет» кусочковому html или есть способ прочитать кусочек html из ответа.

enter image description here

1 Ответ

0 голосов
/ 07 сентября 2018

Согласно вашему коду, возвращаемый json не в строковом формате, это байтовый массив? Это связано со стороной сервера, кодирует ли сервер содержимое перед отправкой обратно? Извините, я пытался добавить комментарии, но мой уровень слишком низкий, я могу только публиковать ответы, надеюсь, что некоторые из моих идей могут помочь.

в моем проекте на стороне сервера мы используем код ниже для отправки ответа

public System.Net.Http.HttpResponseMessage GetServiceStatus()
{
    ......
    string sJsonRet = JsonHelper.Serialize(rspMsg);
    System.Net.Http.HttpResponseMessage resp = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK);
    resp.Content = new System.Net.Http.StringContent(sText,System.Text.Encoding.UTF8, "text/plain");
        return resp;        
}

Клиентская сторона, вы всегда получаете текстовую строку, и мы используем System.Net.WebClient.

 internal void GetServiceStatusCompleted(object sender, UploadStringCompletedEventArgs e){
......
   string response = e.Result;
   if ((response != null) && (response.Length > 0))
      status = (ServiceStatusMsg)JsonHelper.Deserialize(typeof(ServiceStatusMsg), response);

}

...