【发布时间】:2011-01-02 15:48:19
【问题描述】:
import httplib
def httpCode(theurl):
if theurl.startswith("http://"): theurl = theurl[7:]
head = theurl[:theurl.find('/')]
tail = theurl[theurl.find('/'):]
response_code = 0
conn = httplib.HTTPConnection(head)
conn.request("HEAD",tail)
res = conn.getresponse()
response_code = int(res.status)
return response_code
基本上,此函数将获取一个 URL 并返回其 HTTP 代码(200、404 等) 我得到的错误是:
Exception Value: (-2, 'Name or service not known')
我必须用这种方法来做。也就是说,我通常会传入大型视频文件。我需要获取“标头”并获取 HTTP 代码。我无法下载文件然后获取 HTTP 代码,因为这需要很长时间。
Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import httplib
>>> def httpCode(theurl):
... if theurl.startswith("http://"): theurl = theurl[7:]
... head = theurl[:theurl.find('/')]
... tail = theurl[theurl.find('/'):]
... response_code = 0
... conn = httplib.HTTPConnection(head)
... conn.request("HEAD",tail)
... res = conn.getresponse()
... response_code = int(res.status)
... print response_code
...
>>> httpCode('http://youtube.com')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 7, in httpCode
File "/usr/lib/python2.6/httplib.py", line 874, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python2.6/httplib.py", line 911, in _send_request
self.endheaders()
File "/usr/lib/python2.6/httplib.py", line 868, in endheaders
self._send_output()
File "/usr/lib/python2.6/httplib.py", line 740, in _send_output
self.send(msg)
File "/usr/lib/python2.6/httplib.py", line 699, in send
self.connect()
File "/usr/lib/python2.6/httplib.py", line 683, in connect
self.timeout)
File "/usr/lib/python2.6/socket.py", line 498, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -2] Name or service not known
>>>
【问题讨论】:
-
您应该发布回溯,而不仅仅是错误消息。
-
它适用于
http://youtube.com/(我得到一个 301)。 -
您的 python 代码按预期工作。也许您的名称服务器出现故障?尝试查看您的 /etc/hosts 文件。
-
head 和 tail 的值是什么?你确定它们被正确解析了吗?
-
域名服务器故障是什么意思?