urllib2 HTTPPasswordMgr 不起作用 - 凭据未发送错误

2023-12-13

以下 python curl 调用具有以下成功结果:

>>> import subprocess
>>> args = [
        'curl',
        '-H', 'X-Requested-With: Demo',
        'https://username:[email protected]/qps/rest/3.0/count/was/webapp' ] 
>>> xml_output = subprocess.check_output(args).decode('utf-8')
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
138   276    0   276    0     0    190      0 --:--:--  0:00:01 --:--:--   315
>>> xml_output
u'<?xml version="1.0" encoding="UTF-8"?>\n<ServiceResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://qualysapi.qualys.com/qps/xsd/3.0/was/webapp.xsd">\n<responseCode>SUCCESS</responseCode>\n  <count>33</count>\n</ServiceResponse>'

不幸的是,这个调用没有成功转换为 urllib2。我收到不同的 XML 响应,指出用户未提供授权凭据:

>>> import urllib2
>>> # Create a password manager.
... password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
>>> # Add the username and password.
... top_level_url = 'https://qualysapi.qualys.com'
>>> password_mgr.add_password(None, top_level_url, username, password)
>>> handler = urllib2.HTTPBasicAuthHandler(password_mgr)
>>> opener = urllib2.build_opener(handler)
>>> urllib2.install_opener(opener)
>>> headers = {'X-Requested-With':'Demo'}
>>> uri = 'https://qualysapi.qualys.com/qps/rest/3.0/count/was/webapp'
>>> req = urllib2.Request(uri,None,headers)
>>> result = urllib2.urlopen(req)
>>> result
'<ServiceResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://qualysapi.qualys.com/qps/xsd/3.0/was/webapp.xsd">\n  <responseCode>INVALID_CREDENTIALS</responseCode>\n  <responseErrorDetails>\n    <errorMessage>User did not supply any authentication headers</errorMessage>\n  </responseErrorDetails>\n</ServiceResponse>'

顺便说一下,我在 httplib 中收到了同样的错误消息:

>>> import httplib, base64
>>> auth = 'Basic ' + string.strip(base64.encodestring(username + ':' + password))
>>> h = httplib.HTTPSConnection('qualysapi.qualys.com')
>>> h.request("GET", "/qps/rest/3.0/count/was/webapp/")
>>> r1 = h.getresponse()
>>> print r1.status, r1.reason
200 OK
>>> data1 = r1.read()
>>> data1
'<ServiceResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://qualysapi.qualys.com/qps/xsd/3.0/was/webapp.xsd">\n  <responseCode>INVALID_CREDENTIALS</responseCode>\n  <responseErrorDetails>\n    <errorMessage>User did not supply any authentication headers</errorMessage>\n  </responseErrorDetails>\n</ServiceResponse>'

我知道 httplib 和 urllib2 仅当 SSL 被编译到套接字中时才可能工作,其中 SSL 被编译到套接字的模块中。事实上,我已经成功地将 urllib2 用于不同 API 上的其他调用。该问题仅限于这一特定 API。

urllib2(和httplib)与curl 的做法有何不同?

注意:所有示例中使用的用户名和密码均相同。

Update:

问题出在基本身份验证密码管理器上。当我手动添加基本授权标头时,urllib2 cal 可以工作:

>>> import base64
>>> base64string = base64.encodestring('%s:%s' % (username, password))[:-1]
>>> req.add_header("Authorization", "Basic %s" % base64string)
>>> # Make request to fetch url.
... result = urllib2.urlopen(req)
>>> # Read xml results.
... xml = result.read()
>>> xml
'<?xml version="1.0" encoding="UTF-8"?>\n<ServiceResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://qualysapi.qualys.com/qps/xsd/3.0/was/webapp.xsd">\n  <responseCode>SUCCESS</responseCode>\n  <count>33</count>\n</ServiceResponse>'

From Python urllib2 基本身份验证问题

问题是,Python 库根据 HTTP 标准,首先发送未经身份验证的请求,然后只有在重试 401 应答时,才会发送正确的凭据。如果......服务器不执行“完全标准身份验证”,那么库将无法工作。

此特定 API 不会在第一次尝试时以 401 Unauthorized 进行响应,而是以 XML 响应进行响应,其中包含未使用 200 OK 响应代码发送凭证的消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

urllib2 HTTPPasswordMgr 不起作用 - 凭据未发送错误 的相关文章

随机推荐

  • 日期列中的 Kendo 网格格式时间问题[重复]

    这个问题在这里已经有答案了 我有一个剑道网格 它有一个日期列 我想在那里显示日期和时间 我在列定义中使用以下格式 format 0 dd MMM yyyy hh mm ss tt 在模态中我使用了日期类型Updated Date type
  • UnsupportedAudioFileException 的解决方法?

    我正处于用 Java 编写小型音乐 节奏游戏的早期阶段 通过 Slick 框架 该框架又使用 OpenAL 但这可能与这里无关 游戏需要读取 并播放 多个 WAV 格式的声音文件 但某些文件抛出 javax sound sampled Un
  • 在 cookie 中存储数组

    我需要在 cookie 中存储一些数组数据 我一直在研究最好的方法来做到这一点 很多人似乎说使用serialize是要走的路 但在这个线程中 PHP如何字符串化数组并存储在cookie中 有人建议不要使用它 因为 序列化将调用序列化类的构造
  • 在函数中使用 dplyr group_by

    我试图在本地函数中使用 dplyr 的 group by 例如 testFunction lt function df x df gt group by x gt summarize mean Petal Width mean Petal
  • 使用 Bootstrap Datepicker 时如何获取选定的日期值?

    使用 jquery 和 Bootstrap Datepicker 如何获取我使用 Bootstrap Datepicker 选择的新日期值 仅供参考 我正在使用 Rails 3 和 Coffescript 我使用以下方法设置日期选择器
  • 具有多对多关系的 MVC4 控制器

    我有两个实体 Arena 和 Regulator 它们之间具有多对多的关系 我已经实现了 EF 代码首先接受的解决方案 见下文 我现在一直致力于实现控制器视图 以便当用户创建调节器时 他可以选择一个或多个竞技场 可能使用复选框或多选列表 并
  • 通过 xpath Selenium java 选择具有动态生成的 id 的 WebElements

    我需要在下拉窗口中选择一个元素 每次我在正在测试的网站中打开下拉窗口时 网站都会随机生成该下拉窗口的 ID 下拉窗口的先前实例可见 使用 Firebug 但不可选择 有一个静态路径 但仅当我使用 ChromeDriver 测试它时才有效 而
  • 用于任意对象的 python 哈希函数的替代方案

    在python2 7中 我成功使用hash 将对象放入持久存储在磁盘上的存储桶中 样机代码如下所示 class PersistentDict object def setitem self key value bucket index ha
  • 基本 Docker 容器报告运行级别未知

    当我像这样运行一个基本的 Docker 容器 从 Google Cloud Shell 中 时 docker pull debian docker run i t debian wheezy bin bash 然后输入runlevel在运行
  • 查找给定矩阵的子矩阵

    我正在尝试编写一种算法来在给定的子矩阵中查找子矩阵 为了解决这个问题我编写了以下代码 public class SubMatTry param args public static void main String args TODO Au
  • 添加到 Google 日历呈现链接不显示用户的当地时间

    我可以使用此谷歌日历链接创建一个活动 但我认为 UTC 时间即将到来 比我想要的活动时间提前了 5 30 小时 例子 这个链接将创建一个活动 但显示时间为中午 12 30 至下午 4 点 该活动预计在上午 6 30 至上午 10 点进行 根
  • 是否可以使用单个 SQL 语句将记录从一个表移动到另一个表?

    我需要一个查询将记录从一个表移动到另一个表而不使用多个语句 不可以 您不能在一条 SQL 语句中移动记录 你必须使用一个INSERT随后是一个DELETE陈述 您应该将这些语句包装成交易 以确保复制操作保持原子性 START TRANSAC
  • 使用 oauth2 和 Google API 时无法识别的参数

    我在一些脚本中使用 Google API 服务 但遇到了一些问题 这个错误有点奇怪 但我们开始了 我有一个列出我的 Google 云端硬盘文件的脚本 from apiclient import discovery from httplib2
  • 如何获取成员变量的注解?

    我想知道一个类的一些成员变量的注释 我使用BeanInfo beanInfo Introspector getBeanInfo User class 反思一个类 并使用BeanInfo getPropertyDescriptors 查找特定
  • 如何从一个元组到一个元组引用元组中的元素?

    我有一个 C 11 元组 我想要一个元组std reference wrappers 到元组的相同元素 有没有简单的方法可以做到这一点 映射一个元组很容易一组索引 e g include
  • 在代码中处理语音命令以执行命令的智能方法

    我想知道是否可以寻求更好的方法来处理和处理命令 而不是使用可能变得非常长且非常乏味的 Switch Case 或 IF 布尔检查 E G if settings getName Command Speak I am here if Get
  • 如何用 Python 可视化回归树

    我正在寻找可视化回归使用 scikit learn 中的任何集成方法构建的树 梯度增强回归器 随机森林回归器 装袋回归器 我看过这个问题很接近 并且这个问题它处理分类树 但这些问题需要 树 方法 而该方法不适用于 SKLearn 中的回归模
  • 在 Spring Integration 中,RequestHandlerRetryAdvice 无法与 Ftp.outboundGateway 一起使用

    我的情况与描述的类似这个问题 区别在于我不使用WebFlux outboundGateway but an Ftp outboundGateway我称之为AbstractRemoteFileOutboundGateway Command G
  • phpmyadmin 中的自动增量

    我有一个使用 PHP MySQL 和 phpMyAdmin 的现有数据库 当用户成为我网站的会员时 我需要系统使用五位数字为他们创建一个唯一的会员号码 例如 83773 我想这就像生成一个随机密码 只不过我只想要我的会员的数字 该 ID 号
  • urllib2 HTTPPasswordMgr 不起作用 - 凭据未发送错误

    以下 python curl 调用具有以下成功结果 gt gt gt import subprocess gt gt gt args curl H X Requested With Demo https username email pro