【问题标题】:Reproduce Ajax request with cURL使用 cURL 重现 Ajax 请求
【发布时间】: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 是否有效,但只是数据检索不起作用?你应该得到一些回应,这是什么?

标签: ajax symfony curl


【解决方案1】:

您的所有 cURL 请求都是有效的并且可以被处理。在 Symfony 应用控制器中,您可以通过 Request 对象的 getContent() 方法访问发送的 JSON 对象:

/**
 * @Route("/ajax_call", name="some_action")
 */
public function someAction(Request $request)
{
    if ('' !== $content = $request->getContent()) {
        $data = json_decode($content);
        // some action…
    }

    return new Response(null, Response::HTTP_BAD_REQUEST);
}

在开发者工具栏中,您的请求如下所示:

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2020-04-05
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2015-07-27
    • 2018-01-17
    • 2011-09-05
    相关资源
    最近更新 更多