2013-04-16 1 views
0

Я пытаюсь проверить несколько URL-адресов, чтобы узнать, вернутся ли они как ОК, прежде чем я буду ими управлять, у меня есть список URL-адресов в self.myList, который затем запускает их через HTTP-соединение httplib, чтобы получить ответ, однако я получаю нагрузку ошибок из httplib в cmd.httplib python/wxpython. sock stream error

код работает как я тестировал с ниже, и это правильно возвращается и устанавливает значение в wx.TextCtrl:

#for line in self.myList: 
      conn = httplib.HTTPConnection("www.google.com") 
      conn.request("HEAD", "/") 
      r1 = conn.getresponse() 
      r1 = r1.status, r1.reason 
      self.urlFld.SetValue(str(r1)) 

Это только, кажется, не работает, когда я прохожу его более 1 URL из myList.

for line in self.myList: 
      conn = httplib.HTTPConnection(line) 
      conn.request("HEAD", "/") 
      r1 = conn.getresponse() 
      r1 = r1.status, r1.reason 
      self.urlFld.SetValue(line + "\t\t" + str(r1)) 

Ошибки, которые я получаю на ЦМД

Traceback (most recent call last): 
File "gui_texteditor_men.py", line 96, in checkBtnClick 
conn.request("HEAD", "/") 
File "C:\Python27\lib\httplib.py", line 958, in request 
self._send_request(method, url, body, headers) 
File "C:\Python27\lib\httplib.py", line 992, in _send_request 
self.endheaders(body) 
File "C:\Python27\lib\httplib.py", line 954, in endheaders 
self._send_output(message_body) 
File "C:\Python27\lib\httplib.py", line 814, in _send_output 
self.send(msg) 
File "C:\Python27\lib\httplib.py", line 776, in send 
self.connect() 
File "C:\Python27\lib\httplib.py", line 757, in connect 
self.timeout, self.source_address) 
File "C:\Python27\lib\socket.py", line 553, in create_connection 
for res in getaddrinfo(host, port, 0, SOCK_STREAM): 
socket.gaierror: [Errno 11004] getaddrinfo failed 

Редактировать, обновленный код с помощью urlparse. Я импортировал urlparse.

for line in self.myList: 
      url = urlparse.urlparse(line) 
      conn = httplib.HTTPConnection(url.hostname) 
      conn.request("HEAD", url.path) 
      r1 = conn.getresponse() 
      r1 = r1.status, r1.reason 
      self.urlFld.AppendText(url.hostname + "\t\t" + str(r1)) 

с TRACEBACK,

C:\Python27\Coding>python gui_texteditor_men.py 
Traceback (most recent call last): 
File "gui_texteditor_men.py", line 97, in checkBtnClick 
conn = httplib.HTTPConnection(url.hostname) 
File "C:\Python27\lib\httplib.py", line 693, in __init__ 
self._set_hostport(host, port) 
File "C:\Python27\lib\httplib.py", line 712, in _set_hostport 
i = host.rfind(':') 
AttributeError: 'NoneType' object has no attribute 'rfind' 

теперь у меня есть www.google.com и www.bing.com в текстовый файл, когда он выдает эту ошибку.

Edit 2 @ Ая,

выглядит, как это не удалось из-за "\ п" между 2 URL. Я думал, что я закодировал его, чтобы удалить «\ n» с .strip(), но кажется, что это не имело никакого эффекта.

Failed on u'http://www.google.com\nhttp://www.bing.com' 
Traceback (most recent call last): 
File "gui_texteditor_men.py", line 99, in checkBtnClick 
conn.request("HEAD", url.path) 
File "C:\Python27\lib\httplib.py", line 958, in request 
self._send_request(method, url, body, headers) 
File "C:\Python27\lib\httplib.py", line 992, in _send_request 
self.endheaders(body) 
File "C:\Python27\lib\httplib.py", line 954, in endheaders 
self._send_output(message_body) 
File "C:\Python27\lib\httplib.py", line 814, in _send_output 
self.send(msg) 
File "C:\Python27\lib\httplib.py", line 776, in send 
self.connect() 
File "C:\Python27\lib\httplib.py", line 757, in connect 
self.timeout, self.source_address) 
File "C:\Python27\lib\socket.py", line 553, in create_connection 
for res in getaddrinfo(host, port, 0, SOCK_STREAM): 
socket.gaierror: [Errno 11004] getaddrinfo failed 

Я еще раз посмотрел на мою .strip(), когда я открываю файл,

if dlg.ShowModal() == wx.ID_OK: 
     directory, filename = dlg.GetDirectory(), dlg.GetFilename() 
     self.filePath = '/'.join((directory, filename)) 
     self.fileTxt.SetValue(self.filePath) 
     self.urlFld.LoadFile(self.filePath) 
     self.myList = self.urlFld.GetValue().strip() 

и теперь TraceBack ошибки с "Ошибка при паП '"

Благодарности

+0

Какие ошибки вы используете? – ThiefMaster

+0

Похоже, что один из URL-адресов содержит недопустимое имя хоста. – Aya

+0

он делает это, как www.blahlsghsh.com, но верно, что нужно пойти и попробовать, а затем вернуться, поскольку 404 не найден? EDIT: jsut вынул поддельное имя хоста и попытался снова, те же ошибки с помощью только google.com и bing.com, так что это не влияет на него. – jerrythebum

ответ

1

Если self.myList содержит список URL-адресов, вы не можете использовать их непосредственно в конструкторе HTTPConnection, как вы здесь ...

for line in self.myList: 
    conn = httplib.HTTPConnection(line) 
    conn.request("HEAD", "/") 

Конструктор HTTPConnection должен передавать только часть имени хоста URL-адреса, а методу запроса должна быть предоставлена ​​часть пути. Вам нужно разобрать URL с чем-то вроде ...

import urlparse 

for line in self.myList: 
    url = urlparse.urlparse(line) 
    conn = httplib.HTTPConnection(url.hostname) 
    conn.request("HEAD", url.path) 

Update

Вы можете изменить код, чтобы ...

for line in self.myList: 
    try: 
     url = urlparse.urlparse(line) 
     conn = httplib.HTTPConnection(url.hostname) 
     conn.request("HEAD", url.path) 
     r1 = conn.getresponse() 
     r1 = r1.status, r1.reason 
     self.urlFld.AppendText(url.hostname + "\t\t" + str(r1)) 
    except: 
     print 'Failed on %r' % line 
     raise 

... и включают полная выходная работа?

Update # 2

Я не совсем уверен, что self.fileTxt и self.urlFld должны делать, но если вы просто читать строки из self.filePath, вам нужно всего лишь ...

if dlg.ShowModal() == wx.ID_OK: 
    directory, filename = dlg.GetDirectory(), dlg.GetFilename() 
    self.filePath = '/'.join((directory, filename)) 
    self.myList = [line.strip() for line in open(self.filePath, 'r').readlines()] 
+0

ОК спасибо. не знаю, я не мог передавать URL-адреса httplib. я попробовал, как Вы предложили, 'для линии в self.myList: URL = urlparse.urlparse (линия) сопп = httplib.HTTPConnection (url.hostname) conn.request ("голова", url.path) r1 = conn.getresponse() r1 = r1.status, r1.reason self.urlFld.AppendText (url.hostname + "\ т \ т" + ул (r1)) ' и получить CMD ошибку ' Traceback (последний последний вызов): AttributeError: объект «NoneType» не имеет атрибута «rfind'' – jerrythebum

+0

@directpixel вы можете обновить исходный вопрос и добавить новый код и новую трассировку в полном объеме, пожалуйста? – Aya

+0

сделали, спасибо за вашу помощь – jerrythebum

 Смежные вопросы

  • Нет связанных вопросов^_^