我一直在寻找Python 3.x代码示例以获取HTTP标头信息。
在Python中很容易找到像PHP中的get_headers一样简单的东西。或者也许我不确定如何最好地包围它。
从本质上讲,我想编写一些可以查看URL是否存在的代码
中的某些内容
h = get_headers(url)
if(h[0] == 200)
{
print("Bingo!")
}
到目前为止,我试过了
h = http.client.HTTPResponse('http://docs.python.org/')
但总是有错误
答案 0 :(得分:10)
要在python-3.x中获取HTTP响应代码,请使用urllib.request
模块:
>>> import urllib.request
>>> response = urllib.request.urlopen(url)
>>> response.getcode()
200
>>> if response.getcode() == 200:
... print('Bingo')
...
Bingo
返回的HTTPResponse
Object也可让您访问所有标头。例如:
>>> response.getheader('Server')
'Apache/2.2.16 (Debian)'
如果对urllib.request.urlopen()
的调用失败,则会引发HTTPError
Exception
。您可以处理此问题以获取响应代码:
import urllib.request
try:
response = urllib.request.urlopen(url)
if response.getcode() == 200:
print('Bingo')
else:
print('The response code was not 200, but: {}'.format(
response.get_code()))
except urllib.error.HTTPError as e:
print('''An error occurred: {}
The response code was {}'''.format(e, e.getcode()))
答案 1 :(得分:2)
urllib,urllib2或httplib可以在这里使用。但请注意,urllib和urllib2使用httplib。因此,根据您是否计划进行大量检查(1000次),最好使用httplib。其他文档和示例为here。
示例代码:
import httplib
try:
h = httplib.HTTPConnection("www.google.com")
h.connect()
except Exception as ex:
print "Could not connect to page."
与Python 2.x中的urllib(或urllib2)和httplib类似的故事适用于Python 3.x中的urllib2和http.client库。同样,http.client应该更快。有关更多文档和示例,请查看here。
示例代码:
import http.client
try:
conn = http.client.HTTPConnection("www.google.com")
conn.connect()
except Exception as ex:
print("Could not connect to page.")
如果您想检查状态代码,则需要替换
conn.connect()
与
conn.request("GET", "/index.html") # Could also use "HEAD" instead of "GET".
res = conn.getresponse()
if res.status == 200 or res.status == 302: # Specify codes here.
print("Page Found!")
注意,在这两个示例中,如果要捕获与URL不存在而不是所有URL有关的特定异常,请捕获socket.gaierror异常(请参阅socket documentation)
答案 2 :(得分:1)
您可以使用urllib2库
import urllib2
if urllib2.urlopen(url).code == 200:
print "Bingo"