【发布时间】:2017-06-13 23:04:28
【问题描述】:
我正在尝试使用 cURL 重现 Ajax 请求,但总是失败。 服务器根本看不到发送的数据(以下示例中的 my_data)。
curl \
--request POST \
--header 'Content-type: application/json' \
--header 'X-Requested-With: XMLHttpRequest' \
--url 'http://example.org/ajax_call' \
--data '{"my_data":"data_value"}'
我也试过了:
curl \
--request POST \
--header 'Content-type: application/json' \
--header 'X-Requested-With: XMLHttpRequest' \
--url 'http://example.org/ajax_call' \
--data "my_data":"data_value"
最后:
curl \
--request POST \
--header 'Content-type: application/json' \
--header 'X-Requested-With: XMLHttpRequest' \
--url 'http://example.org/ajax_call' \
-F "my_data=data_value"
服务器永远不会捕获数据(在我的例子中是 Symfony)。我猜 cURL 中的 XMLHttpRequest 格式存在问题,我想知道我正在尝试做的事情是否可能(意味着通过 cURL 正确格式化 XMLHttpRequest 对象)
我在网上爬了几个小时,到目前为止还没有找到任何带有数据参数的东西。
感谢您的帮助
编辑
感谢评论部分的人找到的解决方案是:
curl -v \
--header 'X-Requested-With: XMLHttpRequest' \
'http://example.org/ajax_call' \
-d my_data=data_value
【问题讨论】:
-
路由是否设置为从您的域接收
POST和跨域? -
如果您只输入
curl 'http://example.org/ajax_call' -d my_data=data_value并让curl尝试与服务器一起解决会发生什么?如果可行,请使用curl -v 'http://example.org/ajax_call' -d my_data=data_value重试,然后查看为 Content-Type、Accept 和任何其他相关标头设置的值。 -
您给
curl的选项越少,它就越会为您解决问题。例如,如果您添加-d data=value参数,curl将自动使其成为POST请求,而无需指定-X POST。有时它有助于 API 了解哪些有效,哪些无效,哪些设置重要,哪些设置被忽略。等 -
另外@1252748 是对的,再次检查来自
curl -v的响应,您还可以尝试curl 'http://example.org/ajax_call?my_data=my_value'看看它是否响应url 查询字符串参数 -
你如何测试这个 symfony 方面? POST 是否有效,但只是数据检索不起作用?你应该得到一些回应,这是什么?