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

Python 2.7实现HTTP基础认证获取网站数据遇问题求助

分析你的HTTP Basic Auth请求问题

让我帮你拆解下这两个方法里的错误,以及如何正确实现Python 2.7的HTTPS基础认证请求:

方法一的核心错误

你这个写法有两个致命问题,直接导致了403错误:

  • URL不完整:你只传了secure.pol.com作为url,既没有指定https://协议,也没加上目标资源路径/polcs/trade.xml。urllib2默认会用HTTP协议发送请求,但网站明确要求HTTPS请求,这会让请求直接发错地址。
  • 错误的请求头设置:你把请求行GET /polcs/trade.xml HTTP/1.0放到了headers字典里,这完全不符合HTTP规范。urllib2.Request会自动处理请求方法(默认是GET,传data才会用POST)和HTTP版本,手动添加这个头会让服务器收到格式错误的请求,直接拒绝访问。

方法二的潜在问题

这个写法比方法一规范,但可能存在以下问题:

  • 路径不匹配:你访问的是/polcs/data.xml,但网站示例里的目标路径是/polcs/trade.xml,如果这个路径不是你要访问的正确资源,服务器也会返回错误,请先确认路径是否正确。
  • base64编码的小坑:Python 2.7的base64.encodestring会自动在编码结果末尾添加换行符,虽然你用replace('\n', '')处理了,但更可靠的是用base64.b64encode,它不会额外生成换行。
  • SSL证书验证问题:如果网站的SSL证书不被你的系统信任,urllib2会直接拒绝连接,这时候需要处理证书验证逻辑。

正确的实现代码

这里给你一个标准的可运行版本:

import urllib2
import base64

# 务必使用完整的HTTPS URL,包含正确的资源路径
target_url = 'https://secure.pol.com/polcs/trade.xml'
username = '你的实际用户名'
password = '你的实际密码'

# 使用b64encode进行编码,避免多余换行
auth_str = base64.b64encode('{}:{}'.format(username, password))
auth_header = 'Basic ' + auth_str

# 创建请求对象并添加认证头
request = urllib2.Request(target_url)
request.add_header('Authorization', auth_header)

try:
    # 发送请求并获取响应
    response = urllib2.urlopen(request)
    # 读取返回的数据
    response_data = response.read()
    print(response_data)
except urllib2.HTTPError as err:
    print(f"HTTP错误:{err.code} - {err.reason}")
except urllib2.URLError as err:
    print(f"连接错误:{err.reason}")

处理SSL证书验证问题

如果运行时遇到SSL证书相关的错误,可以临时添加以下代码跳过验证(仅用于测试环境,生产环境请配置信任的证书):

import ssl

# 创建不验证证书的上下文
ssl_context = ssl._create_unverified_context()
# 打开请求时传入上下文
response = urllib2.urlopen(request, context=ssl_context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:32:51