【问题标题】:CURL Command Line URL ParametersCURL 命令行 URL 参数
【发布时间】:2012-11-02 12:05:56
【问题描述】:

我正在尝试使用 CURL 发送带有 url 参数的 DELETE 请求。我在做:

curl -H application/x-www-form-urlencoded -X DELETE http://localhost:5000/locations` -d 'id=3'

但是,服务器没有看到参数 id = 3。我尝试使用一些 GUI 应用程序,当我将 url 传递为:http://localhost:5000/locations?id=3 时,它可以工作。我真的宁愿使用 CURL 而不是这个 GUI 应用程序。谁能指出我做错了什么?

【问题讨论】:

    标签: http curl


    【解决方案1】:

    application/x-www-form-urlencoded Content-type 标头不是必需的(嗯,有点取决于)。除非请求处理程序期望来自表单主体的参数。试试看:

    curl -X DELETE "http://localhost:5000/locations?id=3"
    

    curl -X GET "http://localhost:5000/locations?id=3"
    

    【讨论】:

    • 成功了。我刚刚意识到 URL 必须在引号之间才能接受参数。该 MIME 类型用于带有参数的 URL,这就是 GUI 应用程序使用的。另外,我不想做GET。我想DELETE 而不是GET,我正在尝试遵循正确的 REST 设计标准,所以我在删除时使用 DELETE 而不是 GET。
    • 在我的情况下,它只适用于双引号,单引号表示 curl:(1) 协议 'http 在 libcurl 中不受支持或禁用但使用 "" 引号就可以了。
    • 我其实是在Windows环境下。使用单引号对我不起作用。它抛出了一个错误,如“'http”不支持。但是,当我将它们包含在双引号中时它起作用了。
    【解决方案2】:

    Felipsmartins 是正确的。

    值得一提的是,如果这不是 POST 请求,则无法真正使用 -d/--data 选项。但是,如果您使用 -G 选项,这仍然是可能的。

    这意味着你可以这样做:

    curl -X DELETE -G 'http://localhost:5000/locations' -d 'id=3'
    

    这里有点傻,但是当你在命令行上并且你有很多参数时,它会更整洁。

    我这样说是因为 cURL 命令通常很长,因此值得在多行上使用它来转义换行符。

    curl -X DELETE -G \
    'http://localhost:5000/locations' \
    -d id=3 \
    -d name=Mario \
    -d surname=Bros
    

    如果你使用 zsh,这显然会舒服很多。我的意思是当您需要重新编辑上一个命令时,因为 zsh 可以让您逐行执行。 (只是说)

    希望对你有帮助。

    【讨论】:

    • 救命!谢啦!我有一个脚本,我想在 GET 上使用 --data-urlencode。这样我就不必手动对我的参数进行 url 编码。谢谢!
    • 你是在暗示 -X DELETE -G 真的是一个 POST 请求吗?
    • ` -G, --get 将post数据放到url中,使用GET` 不,只是将post数据添加到url中,-X【方法】优先(来源:curl- -帮助和经验)
    • 怎么会这么复杂。可以假设 --data-urlencode 毫无例外地将数据添加到 URL,但现在您需要将其与 --get 结合以使其真正起作用。
    猜你喜欢
    • 2012-07-11
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2023-02-11
    • 2013-04-18
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多