Python Socket发送GET请求无数据返回,求问题原因与解决方法
问题:Socket请求目标链接返回空输出
目标链接http://data.pr4e.org/intro-short.txt有效,以下是编写的Python代码:
import socket mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) mysock.connect(('data.pr4e.org', 80)) cmd = 'GET http://data.pr4e.org/intro-short.txt HTTP/1.0\n\n'.encode('utf-8') while True: data = mysock.recv(512) if(len(data)) < 1: break print(data.decode()) mysock.close()
期望代码获取该链接文件数据、解码后输出文本内容及响应头,代码无语法错误,但始终返回空输出。尝试过添加/移除www.、在终端而非VSCode运行,结果均一致。请问为何socket无法返回数据?
解答
问题核心是你只定义了请求命令,但没有将其发送给服务器。Socket建立连接后,必须主动调用send()方法把请求传递给服务器,服务器才能接收请求并返回响应。你的代码缺少了mysock.send(cmd)这关键一步,导致服务器完全没收到请求,自然不会返回任何数据,程序最终因无数据可接收而输出为空。
修正后的代码如下:
import socket mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) mysock.connect(('data.pr4e.org', 80)) cmd = 'GET http://data.pr4e.org/intro-short.txt HTTP/1.0\n\n'.encode('utf-8') mysock.send(cmd) # 新增该行发送请求 while True: data = mysock.recv(512) if(len(data)) < 1: break print(data.decode()) mysock.close()
运行修正后的代码,即可正常获取服务器返回的响应头和文件内容。
内容的提问来源于stack exchange,提问作者Tidal Johnson
相关产品推荐
相关产品推荐

