import urllib
print urllib.urlopen('http://www.reefgeek.com/equipment/Controllers_&_Monitors/Neptune_Systems_AquaController/Apex_Controller_&_Accessories/').read()
Run Code Online (Sandbox Code Playgroud)
上面的脚本工作并返回预期的结果,同时:
import urllib2
print urllib2.urlopen('http://www.reefgeek.com/equipment/Controllers_&_Monitors/Neptune_Systems_AquaController/Apex_Controller_&_Accessories/').read()
Run Code Online (Sandbox Code Playgroud)
抛出以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/urllib2.py", line 124, in urlopen
return _opener.open(url, data)
File "/usr/lib/python2.5/urllib2.py", line 387, in open
response = meth(req, response)
File "/usr/lib/python2.5/urllib2.py", line 498, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.5/urllib2.py", line 425, in error
return self._call_chain(*args)
File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
result = func(*args)
File "/usr/lib/python2.5/urllib2.py", line 506, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, …Run Code Online (Sandbox Code Playgroud) 我想使用python urllib2来模拟登录操作,我使用Fiddler来捕获数据包并得到登录操作只是一个ajax请求,用户名和密码作为json数据发送,但我不知道如何使用urllib2发送json数据,帮忙......
我一直在使用亚马逊的产品广告API来生成包含给定图书价格的网址.我生成的一个网址如下:
当我点击链接或粘贴地址栏上的链接时,网页加载正常.但是,当我执行以下代码时,我收到一个错误:
url = "http://www.amazon.com/gp/offer-listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3D0415376327"
html_contents = urllib2.urlopen(url)
Run Code Online (Sandbox Code Playgroud)
错误是urllib2.HTTPError:HTTP错误503:服务不可用.首先,我不明白为什么我甚至会因为网页成功加载而出现此错误.
此外,我注意到的另一个奇怪的行为是,以下代码有时会做,有时不会给出指定的错误:
html_contents = urllib2.urlopen("http://www.amazon.com/gp/offer-listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3D0415376327")
Run Code Online (Sandbox Code Playgroud)
我完全迷失了这种行为的发生方式.是否有任何修复或解决方法?我的目标是阅读网址的html内容.
编辑
我不知道为什么堆栈溢出正在改变我的代码,以便将我在上面列出的amazon链接更改为rads.stackoverflow.无论如何,忽略rads.stackoverflow链接并在引号之间使用上面的链接.
我有一个使用urllib2的Python Web客户端.向我的传出请求添加HTTP标头很容易.我只是创建一个我想要添加的标题的字典,并将其传递给Request初始化程序.
但是,其他"标准"HTTP标头会添加到请求以及我明确添加的自定义HTTP标头中.当我使用Wireshark嗅探请求时,除了我自己添加的标题之外,我还会看到标题.我的问题是我如何访问这些标题?我想记录每个请求(包括完整的HTTP标头集),并且无法弄清楚如何.
任何指针?
简而言之:如何从urllib2创建的HTTP请求中获取所有传出标头?
如果我跑:
urllib2.urlopen('http://google.com')
Run Code Online (Sandbox Code Playgroud)
即使我使用其他网址,我也会遇到同样的错误.
我很确定我的计算机或路由器上没有运行防火墙,而且互联网(来自浏览器)运行正常.
我正在尝试使用urllib2.urlopen通过Facebook Graph API执行GET和POST请求.我从这里注意到:https://stackoverflow.com/questions/2690723/facebook-graph-api-and-django 我可以很容易地执行GET请求.
从这里:如何使用django发送POST请求?并且Python文档http://docs.python.org/library/urllib2.html似乎需要数据参数来执行POST请求.
但是看看Facebook的API:http://developers.facebook.com/docs/reference/api/event/#invited它说
您可以通过向/ EVENT_ID/invite/USER_ID发出HTTP POST来邀请用户参加活动
我不知道如何用urlopen做到这一点,因为直接打开这个url只会检查用户是否被邀请,如API页面所述:
您可以通过向/ EVENT_ID/invite/USER_ID发出HTTP GET来检查特定用户是否已被邀请参加活动:
欣赏输入.
操作系统:Windows 7; Python 2.7.3使用Python GUI Shell
我正在尝试通过Python阅读网站,有几位作者使用urllib和urllib2库.为了将网站存储在变量中,我看到了类似的方法:
import urllib
import urllib2
g = "http://www.google.com/"
read = urllib2.urlopen(g)
Run Code Online (Sandbox Code Playgroud)
最后一行在120秒后生成错误:
> Traceback (most recent call last): File "<pyshell#27>", line 1, in
> <module>
> r = urllib2.urlopen(o) File "C:\Python27\lib\urllib2.py", line 126, in urlopen
> return _opener.open(url, data, timeout) File "C:\Python27\lib\urllib2.py", line 400, in open
> response = self._open(req, data) File "C:\Python27\lib\urllib2.py", line 418, in _open
> '_open', req) File "C:\Python27\lib\urllib2.py", line 378, in _call_chain
> result = func(*args) …Run Code Online (Sandbox Code Playgroud) 我正在访问Github API v3,它工作正常,直到我达到速率限制,所以我从Github设置页面创建了一个个人访问令牌.我正在尝试使用urllib2的令牌和以下代码:
from urllib2 import urlopen, Request
url = "https://api.github.com/users/vhf/repos"
token = "my_personal_access_token"
headers = {'Authorization:': 'token %s' % token}
#headers = {}
request = Request(url, headers=headers)
response = urlopen(request)
print(response.read())
Run Code Online (Sandbox Code Playgroud)
如果我取消注释注释行(直到我达到每小时60个请求的速率限制),此代码可以正常工作.但是当我按原样运行代码时urllib2.HTTPError: HTTP Error 401: Unauthorized
我究竟做错了什么?
当我执行以下行时,
req = urllib2.Request(requestwithtoken)
self.response = urllib2.urlopen(req,self.request).read()
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)
Run Code Online (Sandbox Code Playgroud)
问题是我可以通过使用ping服务来获取令牌curl.在检索令牌的过程中,所有证书都已经过验证.反过来,通过使用生成的令牌,我无法连接到该服务.我在尝试时遇到上述错误.可能是什么原因?
是否可以在每个开启者基础上通过一个袜子服务器上的SOCKS代理获取urllib2的页面?我已经看过使用setdefaultproxy方法的解决方案,但我需要在不同的开启者中使用不同的袜子.
所以有SocksiPy库,它工作得很好,但它必须以这种方式使用:
import socks
import socket
socket.socket = socks.socksocket
import urllib2
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "x.x.x.x", y)
Run Code Online (Sandbox Code Playgroud)
也就是说,它为所有urllib2请求设置相同的代理.如何为不同的开启者设置不同的代理?