将PHP cURL请求转换为node.js

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将PHP cURL请求转换为node.js相关的知识,希望对你有一定的参考价值。

我正在考虑实现Summry,他们只提供php API连接示例 - 是否有人可以将它转换为我的JS请求?

我基本上只是希望它解析我给它的文本,没有什么超级幻想。

我试图在JS请求中看到CURLOPT_POSTFIELDSCURLOPT_HTTPHEADER匹配的内容无济于事。不过,我可能会找错地方。

PHP示例

$long_article = "Long article text goes here";

$ch = curl_init("http://api.smmry.com/&SM_API_KEY=XXXXXXXXX&SM_LENGTH=14&SM_WITH_BREAK");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:")); // Important do not remove
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "sm_api_input=".$long_article);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$return = json_decode(curl_exec($ch), true);
curl_close($ch);

javascript复制

...
const request = require('request-promise');
...

const long_article = 'Long article text goes here';
const r = request({
  method: 'POST',
  uri: `http://api.smmry.com/&SM_API_KEY=${process.env.SMMRY_API_KEY}`,
  // headers: { Authorization: 'array(Expect:)' },
  // body: { sm_api_input: long_article },
  json: true,
});

request(r)
.then((parsedBody) => { debug(parsedBody); })
.catch((err) => { debug(err); });

我得到的错误是{ sm_api_error: 1, sm_api_message: 'INSUFFICIENT VARIABLES' }所以我至少打到了正确的URL - 所以这是一个开始:)

提前致谢!

奥利

答案

您传递给uri的uri正在尝试使用查询字符串,但您没有正确格式化您请求的URI。查询字符串应以?开头,并使用&分隔键/值对。您的查询字符串以&而不是?开头

更改: http://api.smmry.com/&SM_API_KEY=${process.env.SMMRY_API_KEY}&SM_LENGTH=14 &SM_WITH_BREAK

至: http://api.smmry.com/?SM_API_KEY=${process.env.SMMRY_API_KEY}&SM_LENGTH=14&SM_WITH_BREAK

此外,您正在创建请求r,然后将该请求传递给request。这不是请求承诺模块的工作方式。在调用request(opts)时,将立即对URI发出请求,并返回相应的Promise。一旦请求完成,将调用任何链式处理程序(.then().catch().finally())。

const request = require('request-promise')
const sm_api_input = 'Long article text goes here'

request({
    method: 'POST',
    headers: {
        'Expect': '100-continue'
    },
    uri: `http://api.smmry.com/?SM_API_KEY=${process.env.SMMRY_API_KEY}&SM_LENGTH=14&SM_WITH_BREAK`,
    form: {sm_api_input},
    json: true,
    timeout: 20000
})
  .then(body => debug)
  .catch(err => debug)

以上是关于将PHP cURL请求转换为node.js的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Curl将这个mailchimp API请求转换为使用PHP的Guzzle?

如何在curl php中发送第二个请求时保留会话?

将 JSON 转换为 guzzle php 库请求

全网最详细中英文ChatGPT-GPT-4示例文档-步骤指示智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

尝试使用 PayPal 的 api 并需要帮助将 Curl 转换为 PHP

如何将此 cURL 代码转换为 PHP(PayPal API)