You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:04:54