Как я могу отправить необработанные данные в запросе HTTP GET? - PullRequest
4 голосов
/ 16 декабря 2010

В примере на 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?Я понимаю, что некоторые старые браузеры не могут обрабатывать URI длиной более 250 символов, но я согласен с этим.

Ответы [ 2 ]

4 голосов
/ 16 декабря 2010

Запрос GET обычно не передает данные каким-либо другим способом, кроме заголовков, поэтому вы должны передать строку, закодированную в URL, если вы хотите использовать GET.

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 голос
/ 16 декабря 2010

Вы правы, что только POST отправляет данные отдельно от URI.Так что urlencoding это в строку запроса - единственный путь, если вы должны использовать GET.(Ну, я полагаю, вы могли бы попытаться установить пользовательские заголовки запросов или использовать куки, но единственный «широко принятый» способ - это использовать строку запроса.)

...