我发送一些数据到mysockserver监听套接字并期望数据如下
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()
我可以看到msg到达mysockserver如下,但我想看到服务器只接收原始数据,即' + struct.pack("!I",98) +" Hello World blah blah"
"POST / HTTP/1.1
A<rest of message>"
mysockserver并不期望到达msg会以POST开始,而是使用A + PackedInteger + MoreData。 基本上,我如何只发送没有任何标题的原始数据?
现在的问题是,如何在没有标题的情况下发送正文&#34; POST / HTTP / 1.1&#34;?
答案 0 :(得分:0)
不要使用pycurl,直接使用socket
模块。 Pycurl用于发送http请求,而您的服务器显然不是一个http服务器,因为您获得的整数是原始POST请求的一部分:
>>> binascii.unhexlify(hex(1330861088)[2:])
'OST '
简单示例如何运作:
import socket
packet='A'+struct.pack("!I", 98)+"Hello World blah blah"
conn = socket.create_connection(('target_host', target_port))
conn.send(packet)
# ...
conn.close()
此外,您正在尝试使用json.dumps
转储二进制数据,但每个定义的json使用unicode,因此不会起作用,可能不是您真正想要的。