Python urllib2 设置超时
Python urllib2 setting timeout
我正在尝试通过使用 Python 的 urllib2
模块发出 POST 请求来获取 url。我正在按以下方式构建请求。
handler = urllib2.HTTPHandler()
opener = urllib2.build_opener(handler)
url = 'xyz...'
request = urllib2.Request(url,data='{}')
request.add_header('Content-Type','application/json')
request.get_method = lambda: 'POST'
try:
connection = opener.open(request)
except urllib2.HTTPError as e:
connection = e
except urllib2.URLError as e:
print 'TIMEOUT: ' + e.reason
我想在某处为打开请求设置超时。根据文档 https://docs.python.org/3.1/library/urllib.request.html
build_opener()
调用应该 return 一个 OpenDirector
实例,它应该有一个超时参数。但我似乎无法让它发挥作用。另外,我构建请求的原因是因为我需要在请求中指定一个空主体 data='{}'
并且我似乎也无法使用 urlopen
来实现它。任何帮助表示赞赏。
您可以将 timeout
作为参数传递给 opener 的 open
方法调用。
使用 lambda
函数确保请求是 POST
而不是 GET
的正常运行,没有主体
>>> import urllib2
>>> handler = urllib2.HTTPHandler()
>>> opener = urllib2.build_opener(handler)
>>> request = urllib2.Request('http://httpbin.org/post')
>>> request.get_method = lambda: 'POST'
>>> opener.open(request)
<addinfourl at 4363264800 whose fp = <socket._fileobject object at 0x101b654d0>>
只需添加timeout
,
>>> opener.open(request, timeout=0.01)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1227, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error timed out>
我正在尝试通过使用 Python 的 urllib2
模块发出 POST 请求来获取 url。我正在按以下方式构建请求。
handler = urllib2.HTTPHandler()
opener = urllib2.build_opener(handler)
url = 'xyz...'
request = urllib2.Request(url,data='{}')
request.add_header('Content-Type','application/json')
request.get_method = lambda: 'POST'
try:
connection = opener.open(request)
except urllib2.HTTPError as e:
connection = e
except urllib2.URLError as e:
print 'TIMEOUT: ' + e.reason
我想在某处为打开请求设置超时。根据文档 https://docs.python.org/3.1/library/urllib.request.html
build_opener()
调用应该 return 一个 OpenDirector
实例,它应该有一个超时参数。但我似乎无法让它发挥作用。另外,我构建请求的原因是因为我需要在请求中指定一个空主体 data='{}'
并且我似乎也无法使用 urlopen
来实现它。任何帮助表示赞赏。
您可以将 timeout
作为参数传递给 opener 的 open
方法调用。
使用 lambda
函数确保请求是 POST
而不是 GET
的正常运行,没有主体
>>> import urllib2
>>> handler = urllib2.HTTPHandler()
>>> opener = urllib2.build_opener(handler)
>>> request = urllib2.Request('http://httpbin.org/post')
>>> request.get_method = lambda: 'POST'
>>> opener.open(request)
<addinfourl at 4363264800 whose fp = <socket._fileobject object at 0x101b654d0>>
只需添加timeout
,
>>> opener.open(request, timeout=0.01)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1227, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error timed out>