2014-10-31 5 views
0

Я хотел бы отправить запрос GET на сервер, который транслируется почти в режиме реального времени с использованием кодирования Chunk Transfer Encoding, которое я могу завершить по очереди. Например:Как я могу поточно передать запрос GET?

SendChunks = SomeHTTPLibrary.SendData; 
SendChunks(Example.org, "5\r\n") 
SendChunks(Example.org, "Hello\r\n") 
SendChunks(Example.org, "7\r\n") 
SendChunks(Example.org, "Goodbye\r\n") 
SendChunks(Example.org, "0\r\n") 

Где я сейчас нахожусь, я даже не заботятся о прослушивании ответа. Это не обязательно должно быть на C++, мне нравится Python, Javascript, PHP или что-то подобное.

+0

«completley modify line-by-line» - так что ... вы можете использовать любую библиотеку TCP на любом языке и писать все, что вам нравится - Chunk Transfer Encoding или иначе - у вас нет реальной проблемы с кодированием, и этот сайт не для аргументов о выборе языка и библиотеки .... –

+0

Я имею в виду линейный поток для фактического потока, как почти консольные команды отправки, но вместо этого это куски запроса GET. –

+0

так? если вы получаете дескриптор TCP 'socket()', 'connect()' на веб-сервер, вы можете 'send()' line-by-line, если хотите (хотя библиотека TCP [Nagle или аналогичный алгоритм] (http : //en.wikipedia.org/wiki/Nagle%27s_algorithm) и/или буферизация могут эффективно комбинировать или разделять содержимое, которое вы отправляете(), поэтому вам не гарантируется 1: 1 'recv' будет происходить на сервер, но что? TCP - это протокол байтового потока - он не соблюдает понятия отправителя о границах сообщений ... они должны быть закодированы в отправленных данных (например, '\ n's). –

ответ

1

Во-первых, вы не должны отправлять тело запроса вместе с запросом GET. Я думаю, что технически вы можете, но если сервер что-то делает с этим, он несовместим. См. https://stackoverflow.com/a/983458/241294.

От вас вопрос, похоже, что вы уже знаете, что вам нужно кодирование с короткими передачами. Вот грубый пример того, как можно достичь этого в питона, но с POST запроса вместо GET запроса (код взломан из here):

import httplib 

conn = httplib.HTTPConnection('Example.org') 
conn.connect() 
conn.putrequest('POST', '/post') 
conn.putheader('Transfer-Encoding', 'chunked') 
conn.endheaders() 

conn.send("5\r\n") 
conn.send("hello\r\n") 
conn.send("7\r\n") 
conn.send("Goodbye\r\n") 
conn.send("0\r\n") 

resp = conn.getresponse() 
print(resp.status, resp.reason, resp.read()) 
conn.close() 

Для красивее, например, с функцией питона отрывов см How to force http.client to send chunked-encoding HTTP body in python?.

Смежные вопросы