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

Python Socket编程实现HTTP HEAD获取Web响应的代码问题咨询

问题解答
  • 关于代码逻辑是否正确
    你的代码逻辑和预期功能存在多处不匹配的问题:
  1. 计时逻辑错误:你将send_time定义在等待浏览器访问的代码之前,最终统计的耗时包含了用户打开浏览器访问localhost的等待时长,并非你向目标服务器发送请求到接收响应的耗时。
  2. 响应头构造错误:你硬编码返回了HTTP/1.1 200 OK\r\n\r\n响应头,缺少Content-Length、Content-Type等必要字段,大概率会导致浏览器无法正常渲染返回的页面内容。
  3. 缺少输入校验:如果输入的URL没有携带http/https前缀,requests.get会直接抛出异常。
  4. 功能不匹配:你的需求是使用HTTP HEAD方法获取响应、计算耗时,现有代码完全没有对应这部分需求逻辑。
  • 关于是否正确使用HTTP HEAD方法
    你完全没有使用HTTP HEAD方法:代码中调用的是requests.get(),属于HTTP GET方法,会拉取完整的响应体;且整个逻辑中既没有判断浏览器发来的请求类型,也没有向目标服务器发送HEAD请求,和HEAD方法完全无关。

  • 关于终端仅打印请求不打印响应的原因
    你的代码中没有任何打印目标服务器响应的逻辑,拉取到目标站点的HTML内容后直接编码返回给了浏览器,没有做打印操作,终端自然不会输出响应内容。


修正参考代码

如果你要实现「向目标站发送HEAD请求统计耗时,同时本地代理返回页面内容给浏览器」的需求,可以参考如下修改:

from socket import *
import time
import requests

target_url = input("Enter a URL: ")
# 自动补全HTTP前缀避免请求报错
if not target_url.startswith(('http://', 'https://')):
    target_url = 'http://' + target_url
local_port = int(input("Enter a port number: "))

serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', local_port))
serverSocket.listen(1)
print("The server is ready\n")

connectionSocket, addr = serverSocket.accept()
req_mes = connectionSocket.recv(1024).decode()
print("客户端地址:", addr)
print("客户端请求消息:\n", req_mes)

# 发送HEAD请求并统计耗时
send_time = time.time()
head_resp = requests.head(target_url, allow_redirects=True)
receive_time = time.time()
# 打印HEAD响应到终端
print("目标服务器HEAD响应头:\n", dict(head_resp.headers))
print('HEAD请求耗时:', receive_time - send_time)

# 拉取完整页面返回给浏览器
get_resp = requests.get(target_url)
# 构造合法HTTP响应头
response_header = f'HTTP/1.1 {get_resp.status_code} OK\r\nContent-Type: {get_resp.headers.get("Content-Type", "text/html")}\r\nContent-Length: {len(get_resp.content)}\r\n\r\n'
connectionSocket.send(response_header.encode('UTF-8'))
connectionSocket.send(get_resp.content)

connectionSocket.close()
serverSocket.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:00