Python socket练习代码请求Web资源返回400 Bad Request问题求助
问题原因
触发400 Bad Request错误的核心原因有2处:
- 你已经通过
socket.connect和data.pr4e.org的80端口建立了TCP连接,HTTP 1.0协议规定GET请求后仅需填写资源的相对路径,不需要带完整域名前缀,多余的域名信息会被服务器判定为非法请求格式 - HTTP协议标准要求所有行分隔符必须是
\r\n(即CR+LF),你代码里只用了\n作为换行符,大部分Web服务会直接拒绝这种不符合规范的请求
修复后的可用代码
import socket mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) mysock.connect(('data.pr4e.org',80)) # 调整请求路径为相对路径,换行符替换为协议要求的\r\n cmd = 'GET /romeo.txt HTTP/1.0\r\n\r\n'.encode() mysock.send(cmd) while True: data = mysock.recv(512) if len(data) < 1: break print(data.decode()) mysock.close()
补充说明
如果后续需要使用HTTP 1.1协议发起请求,还需要额外补充Host请求头才能正常请求,请求内容写法如下:
GET /romeo.txt HTTP/1.1\r\nHost: data.pr4e.org\r\n\r\n
内容的提问来源于stack exchange,提问作者edbNewbie
相关产品推荐
相关产品推荐

