gpt4 book ai didi

python - urllib2 基本认证怪人

转载 作者:太空狗 更新时间:2023-10-29 21:01:50 29 4
gpt4 key购买 nike

我用这个把头撞在墙上。我一直在尝试每一个例子,阅读我能在网上找到的关于使用 urllib2 的基本 http 授权的最后一点,但我无法弄清楚是什么导致了我的特定错误。

更令人沮丧的是代码适用于一个页面,但不适用于另一页。登录 www.mysite.com/adm 非常顺利。它验证没有问题。然而,如果我将地址更改为“http://mysite.com/adm/items.php?n=201105&c=200”,我会收到此错误:

<h4 align="center" class="teal">Add/Edit Items</h4>
<p><strong>Client:</strong> </p><p><strong>Event:</strong> </p><p class="error">Not enough information to complete this task</p>

<p class="error">This is a fatal error so I am exiting now.</p>

谷歌搜索导致关于此错误的信息为零。

adm 是一个框架集页面,我不确定它是否相关。

这是当前代码:

import urllib2, urllib
import sys

import re
import base64
from urlparse import urlparse

theurl = 'http://xxxxxmedia.com/adm/items.php?n=201105&c=200'
username = 'XXXX'
password = 'XXXX'

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl,username,password)

authhandler = urllib2.HTTPBasicAuthHandler(passman)

opener = urllib2.build_opener(authhandler)

urllib2.install_opener(opener)

pagehandle = urllib2.urlopen(theurl)

url = 'http://xxxxxxxmedia.com/adm/items.php?n=201105&c=200'
values = {'AvAudioCD': 1,
'AvAudioCDDiscount': 00, 'AvAudioCDPrice': 50,
'ProductName': 'python test', 'frmSubmit': 'Submit' }

#opener2 = urllib2.build_opener(urllib2.HTTPCookieProcessor())
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)

这只是我尝试过的众多版本之一。我已经按照 Urllib2 Missing Manual 中的每个示例进行操作,但仍然收到相同的错误。

谁能指出我做错了什么?

最佳答案

今天遇到了类似的问题。我在我正在开发的网站上使用基本身份验证,但我无法对任何用户进行身份验证。

这里有一些你可以用来调试你的问题的东西:

  1. 我用了slumber.inhttplib2用于测试目的。我从 ipython shell 运行这两个程序以查看收到的响应。
  2. Slumber 实际上在幕后使用了 httplib2,因此它们的行为相似。我使用 tcpdump 和后来的 tcpflow(以更易读的形式显示信息)来查看真正发送和接收的内容。如果您需要 GUI,请参阅 wireshark 或替代品。
  3. 我用 curl 测试了我的网站,当我将 curl 与我的用户名/密码一起使用时,它工作正常并显示了请求的页面。但是 slumber 和 httplib2 仍然无法正常工作。
  4. 我测试了我的网站和browserspy.dk看看有什么不同。重要的是 browserspy 的网站适用于基本身份验证,而我的网站没有,所以我可以比较两者。我在很多地方读到您需要发送 HTTP 401 Not Authorized 以便浏览器或您使用的工具可以发送您提供的用户名/密码。但我不知道的是,您还需要 header 中的 WWW-Authenticate 字段。所以这是缺失的部分。
  5. 让整个情况变得奇怪的是,在测试时我会看到 httplib2 发送带有大多数请求的基本身份验证 header (tcpflow 会显示这一点)。事实证明,库不会在第一次请求时发送用户名/密码身份验证。如果响应中包含“Status 401”和“WWW-Authenticate”,则凭据会在第二个请求中发送,并且此后所有请求都会发送到该域。

总而言之,您的应用程序可能是正确的,但您可能不会返回客户端发送凭据的标准 header 和状态代码。使用您的调试工具来查找哪个是哪个。此外,httplib2 有 Debug模式,只需设置 httplib2.debuglevel=1 即可在标准输出上打印调试信息。这比使用 tcpdump 更有帮助,因为它处于更高级别。

希望这对某人有帮助。

关于python - urllib2 基本认证怪人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882913/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com