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

Python 3中GET请求无响应,代码仅打印指定请求信息问题排查

排查Python requests发送GET请求仅输出请求头无响应的问题

看起来你遇到了一个典型的请求卡住的问题——用Python 3的requests库发送GET请求时,只看到了底层socket发送请求头的debug日志,但目标网站完全没有响应。先看看你提供的代码片段:

import requests
import logging
try:
    import http.client as http_client
except ImportError:
    # Python 2
    import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
# You must initialize logging, otherwise you'll not see debug out...

下面我来分析可能的原因和对应的解决办法:

可能的原因

  • 日志配置缺失:你开启了http.client的debuglevel,但没有完成Python logging模块的初始化,导致只能看到请求发送的日志,完全看不到后续的连接状态、响应接收、超时等关键信息,没法定位到底卡在哪一步。
  • 反爬机制拦截:目标站flowersbay.ru可能识别出你使用的是python-requests/2.18.4这个默认UA,直接拒绝了连接或者故意不返回响应。
  • 网络/服务器问题:你的网络到目标服务器的路由存在阻塞,或者目标服务器暂时宕机、资源已被删除,也可能是本地防火墙/代理拦截了请求。
  • 请求头不完整:直接请求图片资源时,部分网站会要求携带Referer、Cookie等请求头,否则不会返回内容。

解决步骤

1. 完善日志配置,获取完整请求流程

先补全日志初始化代码,这样能看到所有网络交互细节,帮你判断问题出在哪:

import requests
import logging
try:
    import http.client as http_client
except ImportError:
    import httplib as http_client

# 初始化logging,开启DEBUG级别日志
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
# 开启requests和urllib3的DEBUG日志
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

http_client.HTTPConnection.debuglevel = 1

# 发送请求的代码
target_url = "http://flowersbay.ru/images/cms/thumbs/818029804609cbb6501795d736843e86c5e0051b/yacshik_orange_flowersbay1_370_370.jpg"
try:
    response = requests.get(target_url)
    print("响应状态码:", response.status_code)
except Exception as e:
    print("请求出错:", str(e))

运行后你会看到更详细的日志,比如是否成功建立TCP连接、是否收到服务器的响应头,还是卡在了等待响应的环节。

2. 模拟浏览器请求头,规避反爬

把请求头改成浏览器的样式,比如Chrome的UA,再加上Referer字段模拟正常浏览行为:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Referer": "http://flowersbay.ru/"  # 模拟从网站主页跳转至图片的请求
}

try:
    response = requests.get(target_url, headers=headers, timeout=10)
    print("响应状态码:", response.status_code)
except Exception as e:
    print("请求出错:", str(e))

大多数反爬机制会优先检查UA和Referer,这样修改后大概率能绕过基础拦截。

3. 添加超时设置,避免无限等待

给请求加上超时时间,这样如果服务器长时间无响应,会直接抛出超时异常,不会一直卡住:

# 这里设置10秒超时,你可以根据需要调整
response = requests.get(target_url, headers=headers, timeout=10)

如果抛出Timeout异常,说明服务器没有在规定时间内响应;如果是ConnectionError,则是无法建立连接,可能是网络或服务器的问题。

4. 手动验证资源可用性

先在浏览器里直接打开这个图片URL,看看能不能正常加载:

  • 如果浏览器也打不开,那就是目标网站的问题(资源被删除、服务器宕机等),和你的代码无关;
  • 如果浏览器能打开,那就是你的请求头或者爬虫特征被识别了,继续调整请求头即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:29:49