相关疑难解决方法(0)

Python urllib2,基本HTTP身份验证和tr.im.

我正在玩,尝试编写一些代码来使用tr.im API来缩短URL.

在阅读http://docs.python.org/library/urllib2.html后,我尝试了:

   TRIM_API_URL = 'http://api.tr.im/api'
   auth_handler = urllib2.HTTPBasicAuthHandler()
   auth_handler.add_password(realm='tr.im',
                             uri=TRIM_API_URL,
                             user=USERNAME,
                             passwd=PASSWORD)
   opener = urllib2.build_opener(auth_handler)
   urllib2.install_opener(opener)
   response = urllib2.urlopen('%s/trim_simple?url=%s'
                              % (TRIM_API_URL, url_to_trim))
   url = response.read().strip()
Run Code Online (Sandbox Code Playgroud)

response.code是200(我认为它应该是202).url有效,但基本的HTTP身份验证似乎没有用,因为缩短的URL不在我的URL列表中(在http://tr.im/?page=1).

在阅读http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly后, 我也尝试过:

   TRIM_API_URL = 'api.tr.im/api'
   password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
   password_mgr.add_password(None, TRIM_API_URL, USERNAME, PASSWORD)
   auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
   opener = urllib2.build_opener(auth_handler)
   urllib2.install_opener(opener)
   response = urllib2.urlopen('http://%s/trim_simple?url=%s'
                              % (TRIM_API_URL, url_to_trim))
   url = response.read().strip()
Run Code Online (Sandbox Code Playgroud)

但我得到了相同的结果.(response.code为200且url有效,但未在我的帐户http://tr.im/中记录.)

如果我使用查询字符串参数而不是基本HTTP身份验证,如下所示:

   TRIM_API_URL = 'http://api.tr.im/api'
   response = urllib2.urlopen('%s/trim_simple?url=%s&username=%s&password=%s'
                              % (TRIM_API_URL,
                                 url_to_trim,
                                 USERNAME,
                                 PASSWORD))
   url = response.read().strip()
Run Code Online (Sandbox Code Playgroud)

...然后不仅url有效,而且它记录在我的tr.im帐户中.(虽然response.code仍然是200.) …

python authentication http

83
推荐指数
4
解决办法
12万
查看次数

Python中的HTTP身份验证

什么是python urllib等效的

curl -u username:password status="abcd" http://example.com/update.json
Run Code Online (Sandbox Code Playgroud)

我这样做了:

handle = urllib2.Request(url)
authheader =  "Basic %s" % base64.encodestring('%s:%s' % (username, password))
handle.add_header("Authorization", authheader)
Run Code Online (Sandbox Code Playgroud)

有更好/更简单的方法吗?

python authentication curl http-headers

15
推荐指数
2
解决办法
1万
查看次数

python urllib2基本身份验证

您好我正在尝试使用python使用urllib2访问API URL:

import urllib2

url = 'https://XXXXXXXXXX.com/'
username = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
password = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
pagehandle = urllib2.urlopen(url)
Run Code Online (Sandbox Code Playgroud)

我不知道这个领域是什么,但我假设我可以使用默认值,即无.

无论如何,我仍然得到401错误:

回溯(最近一次调用最后一次):文件"test5.py",第12行,在pagehandle = urllib2.urlopen(url)文件"/usr/lib/python2.6/urllib2.py",第126行,在urlopen中返回_opener .open(url,data,timeout)文件"/usr/lib/python2.6/urllib2.py",第397行,打开响应= meth(req,response)文件"/usr/lib/python2.6/urllib2 .py",第510行,http_response'http',请求,响应,代码,消息,hdrs)文件"/usr/lib/python2.6/urllib2.py",第435行,错误返回self._call_chain(*args)文件"/usr/lib/python2.6/urllib2.py",第369行,在_call_chain中结果= func(*args)文件"/usr/lib/python2.6/urllib2.py",第518行,在http_error_default引发HTTPError(req.get_full_url(),代码,msg,hdrs,fp)urllib2.HTTPError:HTTP错误401:未经授权

所以看来认证有问题.是否最有可能使用realm = None?

谢谢!

python urllib2

5
推荐指数
1
解决办法
7372
查看次数

标签 统计

python ×3

authentication ×2

curl ×1

http ×1

http-headers ×1

urllib2 ×1