首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用node-libcurl获取文本中的响应/正文?

如何使用node-libcurl获取文本中的响应/正文?
EN

Stack Overflow用户
提问于 2019-12-01 19:21:08
回答 1查看 702关注 0票数 0

我正在使用node-libcurl与我的应用程序接口通信,它应该返回一个普通的JSON响应。我使用了以下代码:

代码语言:javascript
复制
// cURL instance
const curl = new Curl();
const close = curl.close.bind(curl);

// cURL Options
curl.setOpt(Curl.option.URL, 'http://locally-hosted/consume.endpoint');
curl.setOpt(Curl.option.CONNECTTIMEOUT, 60);
curl.setOpt(Curl.option.FOLLOWLOCATION, true);
curl.setOpt(Curl.option.VERBOSE, true);

// Custom headers for this request
curl.setOpt(Curl.option.HTTPHEADER, [
    'Some: Value'
]);

// POST payload
curl.setOpt(Curl.option.POSTFIELDS, querystring.stringify({
    id: 1,
    value: 'foobar'
}));

// cURL cookie settings
const cookieJarFile = path.join(__dirname, 'cookiejar.txt');

curl.setOpt(Curl.option.COOKIEFILE, cookieJarFile);
curl.setOpt(Curl.option.COOKIEJAR, cookieJarFile);

// Cookie jar file check
if (!fs.existsSync(cookieJarFile)) {
  fs.writeFileSync(cookieJarFile);
}

// Event listener for data
curl.on('data', (chunk, curlInstance) => {
  console.log('Receiving data with size: ', chunk.length);
  console.log(chunk.toString());
});

// Event listener for end
curl.on('end', (statusCode, body, headers, curlInstance) => {
  console.info('Status Code: ', statusCode);
  console.info('Headers: ', headers);
  console.info('Body length: ', body.length);
  console.info('Body: ', body);

  curl.close();
});

// Error handler for cURL
curl.on('error', (error, errorCode) => {
  console.error('Error: ', error);
  console.error('Code: ', errorCode);
  curl.close();
});

// Commits this request to the URL
curl.perform();

我在data事件侦听器中或在end事件侦听器完成时获得响应。我面临的问题是,我在这个表示中得到了响应:

代码语言:javascript
复制
Body:  �w[��x��%Yl��(|�q-�.
M$�kネ���A@\��eǽ�>B�E��
                         m�
                           -�

也就是说,我认为这是一个二进制响应,但我无法将其转换为任何合理的值。应用.toString()无济于事,而且,如果您检查data事件侦听器,我会在那里说:chunk.toString(),它返回给我同样的东西。

如何使用Node.js的cURL获取文本正文响应?

EN

回答 1

Stack Overflow用户

发布于 2020-11-27 17:39:29

接收到的数据将作为缓冲区传递给end事件,请将此代码添加到代码中。

代码语言:javascript
复制
curl.enable(CurlFeature.NoDataParsing);

有关更多信息,请查看docs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59125015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档