我正在玩,尝试编写一些代码来使用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 urllib2 Basic Auth Problem代码来从需要身份验证的URL下载网页内容.我正在尝试的代码是:
import urllib2, base64
request = urllib2.Request("http://api.foursquare.com/v1/user")
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
Run Code Online (Sandbox Code Playgroud)
它告诉我:
./xx.py: line 1: import: command not found
./xx.py: line 3: syntax error near unexpected token `('
./xx.py: line 3: `request = urllib2.Request("http://api.foursquare.com/v1/user")'
Run Code Online (Sandbox Code Playgroud)
我想知道我做错了什么?我在用Python 2.7.5.如何从需要身份验证的URL下载文件内容?
我正在尝试使用http://developer.github.com/v3/来检索项目问题.这有效:
curl -u "Littlemaple:mypassword" https://api.github.com/repos/MyClient/project/issues
Run Code Online (Sandbox Code Playgroud)
它返回我客户项目的所有私人问题.但是,我无法找到如何在Python中实现它.我找到的两种方式(例如Python urllib2 Basic Auth Problem)都不起作用,它们返回404或403错误:
def fetch(url, username, password):
"""Wonderful method found on forums which does not work.""""
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman)))
req = urllib2.Request(url)
f = urllib2.urlopen(req)
return f.read()
Run Code Online (Sandbox Code Playgroud)
...和:
def fetch(url, username, password):
"""Wonderful method found on forums which does not work neither.""""
request = urllib2.Request(url)
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
return urllib2.urlopen(request).read()
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?提前致谢!
在卷曲我这样做:
curl -u email:password http://api.foursquare.com/v1/venue.json?vid=2393749
Run Code Online (Sandbox Code Playgroud)
我怎么能在python中做同样的事情?
我目前有一个小脚本可以下载网页并提取一些我感兴趣的数据.没什么好看的.
目前我正在下载这样的页面:
import commands
command = 'wget --output-document=- --quiet --http-user=USER --http-password=PASSWORD https://www.example.ca/page.aspx'
status, text = commands.getstatusoutput(command)
Run Code Online (Sandbox Code Playgroud)
尽管这很有效,但我认为删除对wget的依赖是有意义的.我认为将上面的内容转换为urllib2应该是微不足道的,但到目前为止我没有成功.互联网是完整的urllib2示例,但我没有发现任何符合我对HTTPS服务器的简单用户名和密码HTTP身份验证的需求.
我正在尝试访问REST API.
我可以使用Curl/REST Client(UI工具),启用抢先身份验证.
但是,使用urllib2,它似乎默认不支持这个,我找不到打开它的方法.
谢谢 :)