网页爬虫调用SMWS API连接失败,请求解决办法
解决SMWS API请求连接到本地127.0.0.1被拒绝的问题
错误原因分析
从报错信息看,请求最终被导向了127.0.0.1:80而非目标API地址,大概率是以下几个原因:
- 系统代理配置干扰:requests默认读取系统的HTTP/HTTPS代理环境变量,如果这些变量指向了本地未运行的代理服务,就会出现连接拒绝。
- 代码遗漏关键导入:原代码中使用了
requests.Session()但未导入requests模块,这会直接导致运行错误(可能是粘贴时遗漏)。 - API重定向异常:SMWS API可能存在地址变更或异常重定向,导致请求被错误转发到本地。
可行解决办法
1. 禁用系统代理干扰
在创建session后添加session.trust_env = False,强制requests不使用系统代理:
session = requests.Session() session.trust_env = False # 禁用系统代理
2. 补全缺失的requests导入
在代码开头添加:
import requests
3. 排查API重定向问题
临时禁用重定向,查看初始请求的状态码和重定向地址:
response = session.get(url, params=params, allow_redirects=False) print("状态码:", response.status_code) print("重定向地址:", response.headers.get("Location"))
如果Location指向本地地址,说明API端点可能已变更,需要查阅SMWS官方文档确认最新的API地址。
4. 升级requests和urllib3版本
旧版本的库可能存在重定向或代理处理的bug,执行以下命令升级:
pip install --upgrade requests urllib3
修改后的完整代码示例
import time from datetime import datetime import requests # 补全导入 from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry # Create a session with retries session = requests.Session() session.trust_env = False # 禁用系统代理 retry = Retry(connect=3, backoff_factor=0.5) adapter = HTTPAdapter(max_retries=retry) session.mount('http://', adapter) session.mount('https://', adapter) url = "https://api.smws.com/api/v1/bottles" params = { "store_id": "uk", "parent_id": 61, "page": 1, "sortBy": "pricedesc", "minPrice": 0, "maxPrice": 0, "perPage": 256, } store = [] new_store = [] now = datetime.now() date = now.strftime("%d/%m %H:%M") print('Time started', date) # 先检查响应状态码 response = session.get(url, params=params) print("Response Status Code:", response.status_code) data = response.json() print(data)
内容的提问来源于stack exchange,提问作者Ianucci
相关产品推荐
相关产品推荐

