Nodejs Ajax 使用 XMLHttpRequest 调用 Header
Nodejs Ajax Call with XMLHttpRequest Header
我正在尝试为 Hubot 编写脚本以对 Strawpoll.me 进行 AJAX 调用。我有一个 cURL 命令可以完全按照我想要的方式工作,但我无法将其转换为 Node.js 函数。
curl --header "X-Requested-With: XMLHttpRequest" --request POST --data "options=1&options=2&options=3&options=4&options=5&title=Test&multi=false&permissive=false" http://strawpoll.me/api/v2/polls
这是我目前在脚本中的内容。
QS = require 'querystring'
module.exports = (robot) ->
robot.respond /strawpoll "(.*)"/i, (msg) ->
options = msg.match[1].split('" "')
data = QS.stringify({
title: "Strawpoll " + Math.floor(Math.random() * 10000),
options: options,
multi: false,
permissive: true
})
req = robot.http("http://strawpoll.me/api/v2/polls").headers({"X-Requested-With": "XMLHttpRequest"}).post(data) (err, res, body) ->
if err
msg.send "Encountered an error :( #{err}"
return
msg.reply(body)
脚本版本正在回归{"error":"Invalid request","code":40}
我不知道我做错了什么。感谢您的帮助。
对于 POST 个请求,curl
将 Content-Type
设置为 application/x-www-form-urlencoded
。 Hubot 使用 Node 的 http 客户端,OTOH 不使用 Content-Type
header 的任何默认值。如果没有明确的 Content-Type
header,http://strawpoll.me/api/v2/polls
处的资源无法识别请求 body。您必须手动设置 Content-Type
header 以模拟 curl 的请求。
robot.http('http://strawpoll.me/api/v2/polls')
.headers({'X-Requested-With': 'XMLHttpRequest', 'Content-Type': 'application/x-www-form-urlencoded'})
.post(data)
我正在尝试为 Hubot 编写脚本以对 Strawpoll.me 进行 AJAX 调用。我有一个 cURL 命令可以完全按照我想要的方式工作,但我无法将其转换为 Node.js 函数。
curl --header "X-Requested-With: XMLHttpRequest" --request POST --data "options=1&options=2&options=3&options=4&options=5&title=Test&multi=false&permissive=false" http://strawpoll.me/api/v2/polls
这是我目前在脚本中的内容。
QS = require 'querystring'
module.exports = (robot) ->
robot.respond /strawpoll "(.*)"/i, (msg) ->
options = msg.match[1].split('" "')
data = QS.stringify({
title: "Strawpoll " + Math.floor(Math.random() * 10000),
options: options,
multi: false,
permissive: true
})
req = robot.http("http://strawpoll.me/api/v2/polls").headers({"X-Requested-With": "XMLHttpRequest"}).post(data) (err, res, body) ->
if err
msg.send "Encountered an error :( #{err}"
return
msg.reply(body)
脚本版本正在回归{"error":"Invalid request","code":40}
我不知道我做错了什么。感谢您的帮助。
对于 POST 个请求,curl
将 Content-Type
设置为 application/x-www-form-urlencoded
。 Hubot 使用 Node 的 http 客户端,OTOH 不使用 Content-Type
header 的任何默认值。如果没有明确的 Content-Type
header,http://strawpoll.me/api/v2/polls
处的资源无法识别请求 body。您必须手动设置 Content-Type
header 以模拟 curl 的请求。
robot.http('http://strawpoll.me/api/v2/polls')
.headers({'X-Requested-With': 'XMLHttpRequest', 'Content-Type': 'application/x-www-form-urlencoded'})
.post(data)