Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将PHP cURL请求转换为node.js_Javascript_Php_Node.js_Api_Request - Fatal编程技术网

Javascript 将PHP cURL请求转换为node.js

Javascript 将PHP cURL请求转换为node.js,javascript,php,node.js,api,request,Javascript,Php,Node.js,Api,Request,我正在研究如何实现,他们只给出了PHP API连接的例子——有没有可能有人能帮我把它转换成JS请求 我基本上只是想让它解析我给它的文本,还没什么特别的 我试图查看JS请求中的CURLOPT\u POSTFIELDS和CURLOPT\u HTTPHEADER匹配的内容,但没有成功。不过,我可能找错地方了 PHP示例 $long_article = "Long article text goes here"; $ch = curl_init("http://api.smmry.com/&S

我正在研究如何实现,他们只给出了PHP API连接的例子——有没有可能有人能帮我把它转换成JS请求

我基本上只是想让它解析我给它的文本,还没什么特别的

我试图查看JS请求中的
CURLOPT\u POSTFIELDS
CURLOPT\u 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:'变量不足'}
所以我至少找到了正确的URL-这是一个开始:)

提前谢谢


Ollie

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

更改:
http://api.smmry.com/&SM_API_KEY=${process.env.SMMRY\u API\u KEY}&SM\u LENGTH=14
&SM_带_中断

致:
http://api.smmry.com/?SM_API_KEY=${process.env.SMMRY\u API\u KEY}&SM\u LENGTH=14&SM\u带\u BREAK

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


谢谢你的帮助:)看来QS应该是一个“&”符号。另一个api路径似乎可以完美地工作
uri:http://api.smmry.com/&SM_API_KEY=${process.env.SMMRY\u API\u KEY}&SM\u URL=http://www.bbc.co.uk/news/uk-england-oxfordshire-42238343
这真的很奇怪。我接受了上面的请求(在
uri
之后需要一个讨厌的逗号),但我仍然得到了一个神秘的
{sm\u api\u错误:1,sm\u api\u消息:“变量不足”}
。谢谢您的时间:)@Ollie您确定要为请求传递所有必需的变量吗。查看这些文档,您的URI在
request()选项中不正确。再看看我的答案,看看更新后的URI,看看是否有效。我已经让它工作了!除了api键之外的任何东西都是可选的:)如果您将它从
body
更改为
form
,它将完美地工作<代码>uri:http://api.smmry.com/&SM_API_KEY=${process.env.SMMRY_API_KEY},表单:{sm_API_input}
,非常感谢您的时间:)如果您将问题编辑为该表单+uri,我可以将您标记为正确:)@Ollie ah,请求必须使用表单头而不是
应用程序/json
。我已经更新了我的答案
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)