2015-07-07 10 views
0

Я посылаю некоторые данные mysockserver прослушивает сокет и ожидает данные следующимКак отправить http-тело без заголовка «POST/HTTP/1.1», используя pycurl?

packet='A'+struct.pack("!I", 98)+"Hello World blah blah" 

Он работает все нормально. Теперь мне нужно отправить выше данные в гнездо, расположенное за http mytcpipserver.com. mytcpipserver.com перенаправляет сообщения на mysockserver. Я попытался следующие

csocket = pycurl.Curl() 
csocket.setopt(pycurl.URL, 'https://mytcpipserver.com:443') 
csocket.setopt(pycurl.PROXY, 'myproxy.com:8080') 
csocket.setopt(pycurl.PROXYPORT, 8080) 
csocket.setopt(pycurl.VERBOSE, 1) 
csocket.setopt(pycurl.HTTPPROXYTUNNEL, 1) 
headers = ['POST', 'Expect: ', 'User-Agent: ', 'Host:', 'Accept:', 'Content-Length:', 'Content-Type:'] 
csocket.setopt(pycurl.HTTPHEADER, headers) 
header = "A" + struct.pack("!I", len(message)) 
packet = header + message 
csocket.setopt(pycurl.POSTFIELDS, packet) 
csocket.perform() 

Я могу видеть, что сообщ достигает до mysockserver следующим образом, но я хочу видеть сервер получать только сырые т.е. данные «A» + struct.pack («Я», 98) + "Hello Мир-бла-бла»

"POST/HTTP/1.1 

A<rest of message>" 

mysockserver не ожидал прибыл Сообщ начать с POST, но с A + PackedInteger + MoreData. В принципе, как я могу отправить только необработанные данные без заголовка?

SO вопрос сейчас, как отправить тело без заголовка «POST/HTTP/1.1»?

ответ

0

Не используйте pycurl, напрямую используйте модуль socket. Pycurl для отправки запросов HTTP, и ваш сервер явно не HTTP-сервер, как целое, вы получаете является частью запроса POST сырым:

>>> binascii.unhexlify(hex(1330861088)[2:]) 
'OST ' 

Простой пример того, как он должен работать:

Кроме того, вы пытаетесь сбрасывать двоичные данные с помощью json.dumps, но json для определения использует unicode, поэтому это не будет работать и, вероятно, не то, что вы на самом деле хотите.

+0

Unfurtunately, я могу достичь целевого хоста (т.е. MyServerListeningOnSocket) только следующим httpProxy: 8080-> https: /blahblah.com: 443-> MyServerListeningOnSocket –

+0

socks.setdefaultproxy (socks.PROXY_TYPE_HTTP, 'proxyBlah.com', 8080) ; socket.socket = socks.socksocket; c = socket.socket (socket.AF_INET, socket.SOCK_STREAM); c.connect (('blahblah', 443)); header = "Q" + struct.pack ("! I", len (сообщение)); пакет = заголовок + сообщение c.sendall (пакет); давая мне ошибку socks.py ", строка 349, в __negotiatehttp raise HTTPError ((statuscode, statusline [2])) socks.HTTPError: (400, 'Bad Request'). Я добавил точку с запятой, чтобы сделать код понятным, так как я делаю не знаю, как добавить новую строку после каждой строки в этом разделе комментариев –

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

  • Нет связанных вопросов^_^