我正在尝试检查一些URL,以确保它们在我进一步操作之前是否恢复正常,我在self.myList中有一个URL列表,然后通过httplib HTTP Connection运行这些URL以获取响应,但是我从cmd中的httplib获取大量错误。

该代码有效,正如我在下面进行的测试所示,它可以正确返回并在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))

当我从myList传递超过1个URL时,它似乎不起作用。

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))

我在cmd上遇到的错误是

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))

追溯,

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'

现在,当我引发此错误时,我在.txt文件中有www.google.com和www.bing.com。

编辑2 @ Aya,

似乎由于两个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()

现在,它的回溯错误为“ Failed on u'h'”

谢谢

===============>>#1 票数:1 已采纳

如果self.myList包含URL列表,则不能像在HTTPConnection那样直接在HTTPConnection构造函数中使用它们。

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

仅应将URL的主机名部分传递给HTTPConnection构造函数,并应将路径部分赋予request方法。 您需要使用以下内容解析URL:

import urlparse

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

更新资料

您可以将代码更改为...

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

...并包括运行它的全部输出?

更新#2

我不太确定self.fileTxtself.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()]

  ask by jerrythebum translate from so

未解决问题?本站智能推荐:

1回复

带代理的wxpython httplib显示400错误的请求

看了其他线程,但无法从中建立任何东西。 我有一个URL列表,我正在尝试获取其HEAD状态并在进行进一步操作之前进行检查。 我当前使用httplib编写的代码可以正常工作(其他部分),但是我需要确保代码可以从代理后面工作,这就是我遇到的麻烦。 该代码可以工作并产生输出(如果有的话),
2回复

python:httplib错误:无法发送标头

它引发了一个错误: 如果我评论putheader和endheaders ,它运行正常。 但我需要它保持活力。 有谁知道我做错了什么?
6回复

Python httplib ResponseNotReady

我正在使用python为elgg编写REST客户端,即使请求成功,我也会得到以下响应: 查看标题,我看到了('content-length','5749'),所以我知道那里有一个页面,但是由于出现异常,所以我无法使用.read()来查看它。 ResponseNotReady是什么意思,
3回复

Python httplib和POST

我目前正在处理一段由其他人编写的代码。 它使用httplib向服务器发出请求。 它以正确的格式提供所有数据 - 例如消息正文,标题值等。 问题是,每次尝试发送POST请求时,数据都在那里 - 我可以在客户端看到它,但是没有任何东西到达服务器。 我已经阅读了库规范,其用法似乎是正确的。
1回复

带有[python3.6]的Httplib2无效语法错误

我很久以前用python3构建应用程序。 不幸的是,这些天我的电脑坏了,我的ubuntu服务器发生了故障,不再使用了,所以我重新配置了它,并从github存储库中克隆了python应用程序,并以相同的步骤进行了部署,除了更新了一些依赖项。 然后我收到错误消息。 我知道这是有关python
1回复

与python httplib和pem文件连接时出现SSL错误

我正在尝试使用PEM文件和httplib通过python客户端连接到HTTPS WS 这是代码 但我收到以下错误消息, 你能检查出什么问题吗
2回复

python httplib超时到本地主机

我有一个在端口6868上运行的本地服务器。从技术上讲,它是由express构建的由node.js驱动的微型站点。 实际上,它只有一个'/ push'构造函数,可读取一些数据并将其写入控制台(+一些与问题无关的特定操作)。 使用卷曲时 和node.js可以按预期进行控制台。
1回复

python httplib和断开的tcp连接

如何使用httplib库确定连接是否断开? 似乎如此基本的东西,但我在这里或Google找不到答案。
1回复

Python:httplib request()无法正常工作

我在使用httplib的request()方法时遇到问题。 这是一个很奇怪的问题。 我的代码如下所示: 因此,问题是什么都没打印出来。 query由串联的大量其他字符串组成。 真正奇怪的是,如果我将query设置为等于字符串的实际值(也就是说,实际上将其设置为等于"/search
3回复

Suds错误:httplib中的BadStatusLine

我正在使用肥皂泡0.3.6。 创建suds客户端时,我随机收到错误: httplib.py,_read_status(),第355行,类httplib.BadStatusLine' 以下是用于创建客户端的代码: 这个错误意味着什么,我该如何解决? 谢谢!