最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

将PHP cURL请求转换为node.js

IT培训 admin 4浏览 0评论

将PHP cURL请求转换为node.js

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

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

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

PHP示例

$long_article = "Long article text goes here";

$ch = curl_init("/&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: `/&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/&SM_API_KEY=${process.env.SMMRY_API_KEY}&SM_LENGTH=14 &SM_WITH_BREAK

至: http://api.smmry/?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/?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

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

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

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

PHP示例

$long_article = "Long article text goes here";

$ch = curl_init("/&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: `/&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/&SM_API_KEY=${process.env.SMMRY_API_KEY}&SM_LENGTH=14 &SM_WITH_BREAK

至: http://api.smmry/?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/?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)

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论