请求包:response.body不是JSON

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求包:response.body不是JSON相关的知识,希望对你有一定的参考价值。

我正在使用nodejs request模块从stackexchange api获取数据。但是,我不了解正文的回复

��V�n�6������$_��Ң�C��MQc�Ԓ���wHɉs�.l��s�>��㆕ڋ�
<C2��ݓ-�T��x]OȄ���T���Y�Z��2Cs�ד;��<Ū�å��Ѭ�՚�O�x����i��+��x:��0�d$��ʬ1(��z]�R2�[�d�xnL��0��� %����T�a���f��hM�wV��Z�߭���($�z   �UA�+AJ�w�P;'�BY���L�6�n䖩��;����֏��X?��"B�'�Q5�z[�v+*ka0�(B݉�ޠ�i�)�1D�D���o�ٯ�&��d:FgPNsAE�`:�
1H?j���Fy4O�h��;'�O����#2�H�=`Z)|Rq��J�o+�_�����I��~�d�[TI��pSظ���y�H8����-4
    <p���@�X��Y�d�4�jq��Z;����K�������:pu���NGt��ԟDӉ%l��M��8�&4������#d*� �Eʔbj�-, �u��
IpE��!Y�� `;�5��yX-�b)N&S)0�6�-���f��Q��8��f"i�+m�6.�M�sr�B�ST�x��y�6���l�3����
        <a[48�Mp@��(���b�'���RA�D�m���n\4.8�.��.���v5jjU���Y��25S�-�]���z�T��'�:�޲�d&�I[��7pv�:��Ф(�3���$g$�1��׮z`�0��=�+���5px��x����r��u�-�������V�ڼ����,8L��o�%�ږ��wc�#mM��&v�N|���Z�q�pZ?J������K[���Rd��BfX/�O�#ֿ���˷
��3T�mGa�`۴�7�ƕ"[���T������v_�T�@��A����g����ӌN�]��K�,$΁gJ<��z?���ђ
k��Q�a  ����$V66�g�? �H�����1��5�c�Xi���0[i��܍�
�̞Ϝl�*��8d�����C����R0�i3��dfI�b�k]��^he�QX3�Ҏ ;�5/���X�r(��7Z�A.���tR�9D*�F�ű���V�w�o.�ɪt))4�_ҐUI<��ӻb%���'�d|��3���   

我希望正文为JSON格式。

我尝试使用JSON.parse(body),但会引发此错误

未定义:1 �^

SyntaxError:JSON在位置0处出现意外令牌

这是我的nodeJS应用程序上的代码

var questionId = req.params.id
request.get('https://api.stackexchange.com/2.2/questions/'+questionId+'?order=desc&sort=activity&site=stackoverflow&filter=!9Z(-wwYGT',
    json:true, (error, response, body) => 
        if(error) res.status(500).json(error)
        else
            res.status(200).send(body)
        
    )
答案

Stack Exchange需要gzip。默认情况下,请求模块不请求它,因此它假定不需要解码。

根据要求启用gzip:

const request = require('request');

request.get(
  
    url: 'https://api.stackexchange.com/2.2/questions/53684484?order=desc&sort=activity&site=stackoverflow&filter=!9Z(-wwYGT',
    json:true,
    gzip: true
  , (error, response, body) => 
    console.log(error, response, body);

  
);

https://repl.it/repls/AppropriateSarcasticFilesize

另一答案

假设requestnpm request module,当您分别传递URL和选项时,request方法仅允许两个参数(URL或带有URL的选项和回调)。

例如:

get

以上是关于请求包:response.body不是JSON的主要内容,如果未能解决你的问题,请参考以下文章

Postman-----将 A 请求中 response Body 中的参数值传入到下一个请求 B 的 request body 中作为参数发送请求

解决Okhttp3使用post请求后的response.body()为空

Fiddler抓包返回的Response中总是出现"Response body is encoded. Click to decode. "的解决办法

RestKit:如何处理空的 response.body?

httpclient请求返回响应体,报警告"Going to buffer response body of large or unknown size"的解决方案

spring cloud gateway获取response body