【问题标题】:curl response says "HTTP version not supported", error 505curl 响应说“不支持 HTTP 版本”,错误 505
【发布时间】:2013-12-05 12:31:40
【问题描述】:

我使用 curl 发出请求,响应说不支持 HTTP 版本,错误 505。支持 HTTP 版本的步骤是什么。

谷歌搜索后,我应该使用 curl --http2.0 使其工作,但我的 curl 版本不支持该选项,因为它是在 curl 7.33 中添加的,而我正在使用 curl 版本:curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2

现在,我应该升级我的 curl 还是有其他方法可以支持它,或者我的请求中缺少某些内容(抱歉,我无法显示请求)。

如果我需要升级它,请指定如何将 curl 升级到版本 7.33.0,我没有任何正确的方法来做。

【问题讨论】:

  • 我认为你需要升级你的 cURL。很好奇您正在与之交谈的服务器是 HTTP 2.0。
  • 实际上,我假设它可能使用的是 HTTP 2.0,我不知道该怎么做才能摆脱该错误
  • stackoverflow.com/questions/2757404/… 这可能会有所帮助
  • @linux_fanatic :我已经看到了这个问题,但那是针对 php 的,而我在 linux 中使用 curl 命令行,这也没有给我正确的想法,关于该做什么
  • 正如一些答案所暗示的(和我的情况一样),您可能首先要确认 url 中没有空格。如果有,将它们替换为%20

标签: linux http curl command-line version


【解决方案1】:

对我来说,问题是url 中的错误(我在那里有空间)在这个问题之后结果证明curl 抱怨糟糕的http version 是误报。

【讨论】:

  • 我遇到了完全相同的问题 - URL 中有一个空格。我只需要记住(与浏览器不同)curl 在 HTTP 请求中按字面意思传递 URL。用%20 替换空格并编码其他特殊字符。js 函数encodeURI()encodeURIComponent() 在这里可能会有所帮助(其他语言的许多实现也是如此)
  • 但是如果我使用邮递员用空格调用它,为什么这只是在 curl 中失败,它工作得很好。
  • @YouAreAwesome 这可能会发生,因为 postman 会像这样更改 char 的编码,而 curl in bash 无法进行此类更改
【解决方案2】:

我今天在使用 Imperva Rest API curl 命令时遇到了同样的错误。

原来我使用的 URL 有一些路径 /(其值中包含空格的变量)http://.../.../some path/or/some thing here/resource/sites,它不允许 空格

为了解决这个问题,我使用 %20 替换了空格字符(根据 Imperva REST API v11.5 文档):http://.../.../some%20path/or/some%20thing%20here/resource/sites 然后它起作用了。

【讨论】:

  • 是的。在我的情况下,在 Shell 脚本中,我在输入周围使用引号,默认情况下保留空格
【解决方案3】:

这是由curl 错误消息造成的混乱。但是这个问题与 HTTP 版本无关,大部分时间是 curl URL 内的空格。例如"adc.com/adc?a=hi there",所以要修复这个,只需要根据 rfc3986 转义那些字符,比如 "adc.com/adc?a=hi%20there"

【讨论】:

    【解决方案4】:

    curl 默认使用 HTTP 1.1(-v 和 --trace 会显示),因此如果不支持,您可能需要使用 --http1.0 选项切换到 HTTP 1.0。

    http 2 还没有被服务器广泛使用,只有最近的 curl 版本才支持。

    【讨论】:

      【解决方案5】:

      对我来说,这是在将半编码的“url”传递给 Curl 时,特别是空格没有被编码为“%20”,而其他人员被正确编码。有人应该传递一个完全解码或完全编码的“url”。

      【讨论】:

        【解决方案6】:

        我想这或多或少只是一条消息,告诉您 http 响应在某些方面格式不正确可能是不受支持的 http 格式。

        我今天遇到了同样的问题:我正在使用的服务器应用程序会在其标题中返回不完整的状态消息,例如

        HTTP/1.1  500
        

        而不是

        HTTP/1.1 500 Internal Server Error
        

        并且 curl 会抱怨不受支持的 HTTP 版本。因此,似乎必须填写状态码之后的消息才能成为有效的 http。有道理,但信息有点误导。它不一定与 HTTP 版本有关,它只是说:根据 http 版本规范验证时格式错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-05
          • 2015-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-14
          • 2019-03-10
          相关资源
          最近更新 更多