rya*_*yan 7 python urllib urllib2
在Python中,我可以使用urllib2(和urllib)打开外部URL,例如Google.但是,我在打开localhost URL时遇到了问题.我有一个在端口8280上运行的python SimpleHTTPServer,我可以使用http:// localhost:8280 /成功浏览.
python -m SimpleHTTPServer 8280
Run Code Online (Sandbox Code Playgroud)
值得注意的是,我正在运行Ubuntu,它运行CNTLM以处理对我们公司Web代理的身份验证.因此,wget实际上并不适用于localhost,所以我不认为这是一个urllib问题!
测试脚本(test_urllib2.py):
import urllib2
print "Opening Google..."
google = urllib2.urlopen("http://www.google.com/")
print google.read(100)
print "Google opened."
print "Opening localhost..."
localhost = urllib2.urlopen("http://localhost:8280/")
print localhost.read(100)
print "localhost opened."
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./test_urllib2.py
Opening Google...
<!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><
Google opened.
Opening localhost...
Traceback (most recent call last):
File "./test_urllib2.py", line 10, in <module>
localhost = urllib2.urlopen("http://localhost:8280/")
File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/usr/lib/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.6/urllib2.py", line 429, in error
result = self._call_chain(*args)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 605, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "/usr/lib/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 1161, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.6/urllib2.py", line 1134, in do_open
r = h.getresponse()
File "/usr/lib/python2.6/httplib.py", line 986, in getresponse
response.begin()
File "/usr/lib/python2.6/httplib.py", line 391, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.6/httplib.py", line 355, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine
Run Code Online (Sandbox Code Playgroud)
解决方案:问题确实是因为我在我们的企业Web代理后面使用CNTLM(具体原因导致了我无法确定的问题).解决方案是使用ProxyHandler:
proxy_support = urllib2.ProxyHandler({})
opener = urllib2.build_opener(proxy_support)
print opener.open("http://localhost:8380/").read(100)
Run Code Online (Sandbox Code Playgroud)
由于loki2302指着我这里.
检查问题是否真的出在打开本地主机上,或者 JBoss 是否给出了无效响应(浏览器以某种方式解决了问题):
wget http://localhost:8280/你可以尝试运行一个简单的 Python HTTP 服务器来测试 JBoss 以外的东西:
python -m SimpleHTTPServer 8280
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
13827 次 |
| 最近记录: |