Javascript 将PHP cURL请求转换为node.js
我正在研究如何实现,他们只给出了PHP API连接的例子——有没有可能有人能帮我把它转换成JS请求 我基本上只是想让它解析我给它的文本,还没什么特别的 我试图查看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
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)