PY4E第12章习题1遇404错误:Socket无法获取指定URL文件求助
问题解决:HTTP 404错误的原因与修复
你的代码返回404的核心原因是HTTP请求缺少Host头部。现代Web服务器通常基于Host头区分同一IP下的不同站点,即使使用HTTP/1.0协议,部分服务器也要求必须携带该头部才能正确定位资源。浏览器会自动添加这个头部,所以能正常访问,但你的socket请求未包含该字段,导致服务器无法识别你要访问的站点,返回404错误。
修复后的代码
import socket try: url = input('Enter URL here: ') new_url = url.split('/') host = new_url[2] path = '/' + '/'.join(new_url[3:]) mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) mysock.connect((host, 80)) # 添加Host头部,让服务器明确要访问的主机 cmd = f'GET {path} HTTP/1.0\r\nHost: {host}\r\n\r\n'.encode() mysock.send(cmd) while True: data = mysock.recv(512) if len(data) < 1: break print(data.decode(),end='') mysock.close() except: print('url not found or has issue')
补充说明
- 你访问
http://data.pr4e.org/romeo.txt时,拆分后的路径/romeo.txt本身是正确的,问题仅出在请求头部不完整。 - 添加
Host: {host}字段后,服务器能正确匹配到对应的站点资源,即可返回你需要的内容。
内容的提问来源于stack exchange,提问作者Luvbear4869
相关产品推荐
相关产品推荐

