我正在尝试通过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请求消息。
由于
答案 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'
。
然后,有一些缺少的标题:
Host
header 必需。User-Agent
header是可选的,但大多数服务器都需要它。使用类似的内容进行拍摄,将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
,否则我建议您使用requests
或urllib
。这些包封装了手工处理TCP / UDP套接字的艰苦工作。