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

Python3使用Socket库请求返回404错误,urllib运行正常如何解决?

问题原因与修复方案

你写的socket请求代码存在三个核心错误,触发了服务端的404响应:

  • GET请求的资源路径不符合规范:你已经通过connect方法连接到www.py4inf.com的80端口,发送GET请求时不需要携带完整的URL前缀,仅需要填写资源的绝对路径即可,完整URL前缀会被服务端识别为路径的一部分,自然无法匹配到对应资源。
  • 换行符不符合HTTP协议标准:HTTP协议要求请求头的换行必须使用\r\n(CRLF),而非你代码中的\n,大量严格的Web服务会将不规范的换行判定为非法请求,也无法正确识别请求的结束标识。
  • 缺失Host请求头:当前绝大多数Web服务都使用虚拟主机技术,同一个IP会绑定多个域名,携带Host头可以明确告知服务端你要访问的站点,避免匹配到默认站点返回404。

修复后的代码

import socket
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect(('www.py4inf.com',80))

# 路径仅保留资源部分,使用标准\r\n换行,补充Host请求头
mysock.send(b'GET /code/romeo.txt HTTP/1.0\r\nHost: www.py4inf.com\r\n\r\n')
while True:
    data = mysock.recv(512)
    if len(data) < 1:
        break
    print(data)
mysock.close()

为什么urllib可以正常运行

urllib作为封装好的HTTP请求库,底层会自动完成URL拆分、协议换行符处理、必要请求头补全这些底层细节,不需要开发者手动处理HTTP协议的底层规范,所以不会触发这类格式类错误。

内容的提问来源于stack exchange,提问作者user14918018

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:05