【问题标题】:How can I send raw data in an HTTP GET request?如何在 HTTP GET 请求中发送原始数据?
【发布时间】:2011-05-26 16:54:50
【问题描述】:

http://alx3apps.appspot.com/jsonrpc_example/ 的示例中,当我单击提交按钮时,我注意到(通过使用 Firebug)我的浏览器提交了源代码:

{"params":["Hello ","Python!"],"method":"concat","id":1}

不是发布参数(例如json=[encoded string from above]),而只是发布具有上述值的原始字符串。

是否有一种被广泛接受的方法来通过 GET 请求复制它,还是我需要对相同的字符串进行 urlencode 并将其包含为 http://www.example.com/?json=%7b%22params%22%3a%5b%22Hello+%22%2c%22Python!%22%5d%2c%22method%22%3a%22concat%22%2c%22id%22%3a1%7d?我了解一些较旧的浏览器无法处理超过 250 个字符的 URI,但我可以接受。

【问题讨论】:

    标签: http post get xmlhttprequest urlencode


    【解决方案1】:

    GET 请求通常不会以除标头之外的任何其他方式传输数据,因此如果您希望使用 GET,则应传递 URL 中编码的字符串。

    POST http://alx3apps.appspot.com/jsonrpc_example/json_service/ HTTP/1.1
    Host: alx3apps.appspot.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-gb,en;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    Content-Type: application/json-rpc; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Referer: http://alx3apps.appspot.com/jsonrpc_example/
    Content-Length: 55
    Pragma: no-cache
    Cache-Control: no-cache
    
    {"params":["Howdy","Python!"],"method":"concat","id":1}
    

    在正常形式的帖子中,标头Content-Type: application/x-www-form-urlencoded 让服务器知道需要key=val 格式的格式,而您链接的页面发送Content-Type: application/json-rpc; charset=UTF-8。在标题(以空行终止)之后,数据以指定的格式跟随。

    【讨论】:

      【解决方案2】:

      您是正确的,只有 POST 将数据与 URI 分开提交。因此,如果您必须使用 GET,则将其 urlencoding 到查询字符串中是唯一的方法。 (好吧,我想您可以尝试设置自定义请求标头或使用 cookie,但唯一“被广泛接受”的方法是使用查询字符串。)

      【讨论】:

      • RFC 2616 没有明确说明 GET 不能有正文,但实际上它没有(因此查询字符串“hack”)。正如 Domenic 所说,POST 是最广泛接受的方式,无论是通过提交正文数据还是通过查询字符串。
      猜你喜欢
      • 2020-08-22
      • 2016-08-04
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多