如何在HTTP GET请求中发送原始数据?

时间:2010-12-16 17:26:51

标签: http post get xmlhttprequest urlencode

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,但我很好。

2 个答案:

答案 0 :(得分:4)

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。在标题(以空白行终止)之后,数据以指定的格式跟随。

答案 1 :(得分:1)

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