Python3组成HTTP GET消息

时间:2018-04-10 14:55:38

标签: python python-3.x http networking get

我正在尝试通过TCP连接向服务器发送HTTP GET消息,但似乎我做错了。

['6060', '52', '6060', '8080', '1010', '52', '1010']

这里重要的是变量s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((server, port)) message = 'GET /' + direction + ' HTTP/1.1' s.send(message.encode('utf-8')) while True: webpage = s.recv(1024) print(webpage) if not webpage: break with open('step3.txt', 'wb') as file: file.write(webpage.decode('utf-8').content) 的组合,因为问题是服务器显然无法识别HTTP请求消息。

由于

1 个答案:

答案 0 :(得分:2)

服务器可能拒绝您的HTTP请求,因为您的请求正文无效。看看这个有效的请求:

GET / HTTP/1.1
Host: www.test.com
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
(empty line)

首先:您的请求必须以空行(\r\n结尾。在您的上下文中,这意味着message = 'GET /' + direction + ' HTTP/1.1\n'

然后,有一些缺少的标题:

使用类似的内容进行拍摄,将www.test.com替换为您要与之通信的实际主机名:

message = ''
message += 'GET /' + direction + ' HTTP/1.1\r\n'
message += 'Host: www.test.com\r\n'
message += 'User-Agent: my agent\r\n'
message += '\r\n'

最后,除非您需要撰写使用socket,否则我建议您使用requestsurllib。这些包封装了手工处理TCP / UDP套接字的艰苦工作。