奇怪的 HttpClient 结果

问题描述 投票:0回答:2

当尝试从 Hitbox API 获取数据时,我得到了一个奇怪的结果。对于一个 API 的命令,这种情况每次都会发生,而对于另一个 API 的命令,这种情况只是有时发生。结果或多或少是这样的(这是我得到的最后一个结果):

\u001f� \u0003콋w�8������s�Μmu�~��s��N�t&��N�g6��C��Ͷ$z%9igf��[(� \u0005�\u000f��(:�6����\u000f P�C\u0015 �\u007f�V�\u007f�d��h����2_�&����,�����S������q�\u0017�7��\u0019<�n�~��YoVY�\u0018M>�S� kP���|^���w������9�w2��\u0605�4�Ƿ�&\u0015�ƛ��Xo�\u0014[�6w\u0011onVP\u0005��e\ u000e��\u05ca�l�/����⇝��%�u�u�s�����=���k�

w��z\u0003�a����SR,���s�1����ůdž��2~.6\u0006T>��fR��l�(���\u0017�GHoV�&/�m#�'\u0013�C�N/��E|Q�\u0012���3+�6\u0003z\u0012���q>�{�_��eW�7\u0016�rsIw\u0012\u0018&\u0017��V�\u000f�Ŀ\u001f������e�\u0002A��Zg��U\u0006��\\g\u0015�VP��u.E8Hj�
LA����/͋��|��� ��;xk\u001e��ǣZ� y��\u00019\u0017����ī\u0002��带���u����O]v��XA�{�\u0004�K �l.o\u0016�%t\u0006�<{̆O��=�\u0017\u0017\u0015%$G��\"Oϡ�\u007f����^̹hH���q�8�\u0001�6�\u0015�y�{
��S��4+�pb-\\eI�bB]^
\u001f��{��j�x�\u0004��\u0001�º��QD��\u001eK\u0001;�\u0002+��Y����! ��\u001a��(()>e��ש�r0T?��\u001f�Q���5t�R���� \u0005\u001f(����l\u0013� �� -� �U?�_��&�l>� 0(N4))/���uc��3�\<�U\u0013\u001f\u0002ȱ���^n6ד��g�/�ʹ��ͧ��rP����\u001f���\f4y~\u0005=�V3�\u001c;�k\u0002}�'�m\u001cc�oG��_\u0003b�4�`��

虽然长得多,但复制全部内容是没有意义的(大约 30000 个字符)。

我用来获取json结果的代码是:

string result;

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri(hitboxApiLink);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = client.GetAsync(requestString).Result;
    result = response.Content.ReadAsStringAsync().Result;
}

return result;

我以前用过这个:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(Path.Combine(hitboxApiLink, requestString));
request.KeepAlive = false;
request.ContentType = "application/json; charset=utf-8";
WebResponse response = request.GetResponse();

using(StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
    result = reader.ReadToEnd();
}

它返回相同的结果。但是当我尝试使用 Google Chrome 或 Internet Explorer 获取数据时,它返回正常结果。 API 是:http://developers.hitbox.tv/

我尝试从中获取数据的链接是:https://api.hitbox.tv/media/live/list

c# wpf httpclient
2个回答
19
投票

响应是 GZIPped 的(即使这不是由请求中的

Accept-Encoding
标头指定的,因此从技术上讲这是服务器上的错误)。

您的第二个示例可以通过在发出请求之前添加以下行来修复:

request.AutomaticDecompression = DecompressionMethods.GZip;

这应该为您提供所需的一切,以了解如何解压缩

HttpClient
版本的响应。


0
投票

我遇到了同样的问题,但我无法使用 HttpClient,因为我遇到了无效标头的问题,这些标头在调用 PostAsync() 后无法读取。

我的解决方案是使用 TcpClient 和 SslStream 来实现自动化。这种方法效果很好,但是当我收到必须解压缩返回的内容的响应时,我无法解决解压缩问题。

"

返回的内容为:\\u001f� \\u0004 �

\u001cI�%&/m�{\u007fJ�J��t�\b�
\\u0013$Ð@\\u0010������\\u001diG#)�*��eVe]f\\u0016@�흼��{� "��{���;�N'���? d\u0001l��J�ɞ!���\u001f?~|\u001f?"���� )�L

http响应是: HTTP/1.1 200 好 缓存控制:无缓存、无存储、必须重新验证 编译指示:无缓存 内容类型:text/html;字符集=utf-8 内容编码:gzip 过期时间:-1 变化:接受编码 X-AspNet-版本:4.0.30319 X-XSS-保护:1;模式=块 内容安全策略:框架祖先“自我” 严格传输安全:max-age=15552001;预载 X 允许的跨域策略:无 公钥引脚:pin-sha256="base64+primary==" Set-Cookie HttpOnly:安全 X-内容类型选项:nosniff 推荐人策略:同源 特征-策略:振动“自我” 日期:2023 年 8 月 1 日,星期二 19:51:37 GMT 内容长度:290

有人可以帮我吗???

我也在使用 .net 3.1 和 c#。

我想我尝试了一切可能的事情。

© www.soinside.com 2019 - 2024. All rights reserved.