我正在编写一个使用多个第三方Web API的网络应用程序,我想跟踪低级别请求和广告分析的响应.所以我正在寻找一个能让Python的urllib2记录通过HTTP传输的所有字节的配方.也许是一个次级的Handler?
我需要在服务器和远程Web服务之间创建一个安全通道.我将使用带有客户端证书的HTTPS.我还需要验证远程服务提供的证书.
如何在urllib2中使用自己的客户端证书?
我需要在代码中做些什么才能确保远程证书正确无误?
我正在使用的请求urllib2和HTTPBasicAuthHandler像这样:
import urllib2
theurl = 'http://someurl.com'
username = 'username'
password = 'password'
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
params = "foo=bar"
response = urllib2.urlopen('http://someurl.com/somescript.cgi', params)
print response.info()
Run Code Online (Sandbox Code Playgroud)
我正在httplib.BadStatusLine运行此代码时遇到异常.我怎么去调试?有没有办法看到原始响应是什么,无论无法识别的HTTP状态代码?
我有一段这样的代码
host = 'http://www.bing.com/search?q=%s&go=&qs=n&sk=&sc=8-13&first=%s' % (query, page)
req = urllib2.Request(host)
req.add_header('User-Agent', User_Agent)
response = urllib2.urlopen(req)
Run Code Online (Sandbox Code Playgroud)
当我输入一个大于一个单词的查询,如"狗"时,我得到以下错误.
response = urllib2.urlopen(req)
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 400, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 438, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 521, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) …Run Code Online (Sandbox Code Playgroud) 只需共享一种从内存缓冲区或url创建opencv图像对象的方法,以提高性能.
有时我们会遇到图像二值从网址,以避免额外的文件IO,我们要imread从内存缓冲或网址这一形象,但imread只支持从路径文件系统中读取图像.
下面的代码在Python 2上工作正常但在Python 3上我得到错误:
"ImportError:没有名为'urllib2'的模块"
import urllib2
peticion = 'I'm XML'
url_test = 'I'm URL'
req = urllib2.Request(url=url_test,
data=peticion,
headers={'Content-Type': 'application/xml'})
respuesta = urllib2.urlopen(req)
print(respuesta)
print(respuesta.read())
respuesta.open()
Run Code Online (Sandbox Code Playgroud)
请告诉我错误的原因.
谢谢.
基本上,我试图在python中使用urllib2下载URL.
代码如下:
import urllib2
req = urllib2.Request('www.tattoo-cover.co.uk')
req.add_header('User-agent','Mozilla/5.0')
result = urllib2.urlopen(req)
Run Code Online (Sandbox Code Playgroud)
它输出ValueError,程序会破坏示例中的URL.当我在浏览器中访问URL时,它工作正常.
任何想法如何处理问题?
更新:
感谢Ben James和......检测到问题=>添加'http://'
现在问题得到改进:是否可以使用一些内置函数自动处理此类情况,或者我必须使用后续字符串连接进行错误处理?
在Linux上运行了几个小时后,我使用urllib2,httplib和线程的Python 2.6程序开始为每个请求引发此错误:
<class 'urllib2.URLError'> URLError(gaierror(-3, 'Temporary failure in name resolution'),)
如果我重新启动程序,它会再次开始工作.我的猜测是某种资源枯竭但我不知道如何检查它.我该如何诊断和解决问题?
我需要设置超时urllib2.request().
我不使用,urllib2.urlopen()因为我使用的data参数request.我怎么设置这个?
Python 2.7.9现在对SSL证书验证要严格得多.真棒!
以前工作的程序现在收到CERTIFICATE_VERIFY_FAILED错误,我并不感到惊讶.但我似乎无法让它们工作(没有完全禁用证书验证).
一个程序使用urllib2通过https连接到Amazon S3.
我将根CA证书下载到名为"verisign.pem"的文件中并尝试以下操作:
import urllib2, ssl
context = ssl.create_default_context()
context.load_verify_locations(cafile = "./verisign.pem")
print context.get_ca_certs()
urllib2.urlopen("https://bucket.s3.amazonaws.com/", context=context)
Run Code Online (Sandbox Code Playgroud)
即使在第4行正确打印出根CA,我仍然会收到CERTIFICATE_VERIFY_FAILED错误.
openssl可以很好地连接到这台服务器.实际上,这是我用来获取CA证书的命令:
openssl s_client -showcerts -connect bucket.s3.amazonaws.com:443 < /dev/null
Run Code Online (Sandbox Code Playgroud)
我拿了链中的最后一个证书并把它放在一个PEM文件中,openssl读得很好.这是Verisign证书:
Serial number: 35:97:31:87:f3:87:3a:07:32:7e:ce:58:0c:9b:7e:da
Subject key identifier: 7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
SHA1 fingerprint: F4:A8:0A:0C:D1:E6:CF:19:0B:8C:BC:6F:BC:99:17:11:D4:82:C9:D0
Run Code Online (Sandbox Code Playgroud)
任何想法如何启用验证?
urllib2 ×10
python ×9
ssl ×2
certificate ×1
debugging ×1
http ×1
http-error ×1
httplib ×1
httprequest ×1
image ×1
logging ×1
numpy ×1
opencv ×1
python-3.5 ×1
stringio ×1