Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python http.client getaddrinfo失败_Python_Http_Python 3.3_Httpconnection_Getresponse - Fatal编程技术网

Python http.client getaddrinfo失败

Python http.client getaddrinfo失败,python,http,python-3.3,httpconnection,getresponse,Python,Http,Python 3.3,Httpconnection,Getresponse,我正在使用http.client尝试从主机读取xml文件。我会使用urllib2,但是我得到了一个BadStatusLine,因为在xml头之前有3个空格(我不能更改它)。这就是我尝试这条路线的原因 我现在被卡住了,并且不断出现错误(getaddrinfo失败) 下面是我的代码,下面是回溯。有人能告诉我哪里做错了吗 仅供参考在浏览器上工作的地址是http://machineIP:81/command=AB&time=2013-06-02 我可以通过这种方式访问xml 提前谢谢你的帮助 代码: 回

我正在使用http.client尝试从主机读取xml文件。我会使用urllib2,但是我得到了一个BadStatusLine,因为在xml头之前有3个空格(我不能更改它)。这就是我尝试这条路线的原因

我现在被卡住了,并且不断出现错误(getaddrinfo失败)

下面是我的代码,下面是回溯。有人能告诉我哪里做错了吗

仅供参考在浏览器上工作的地址是
http://machineIP:81/command=AB&time=2013-06-02

我可以通过这种方式访问xml

提前谢谢你的帮助

代码:

回溯:

C:\Users\Me\Desktop\Coding>python file.py
Enter the IP: *.***.***.***
Reading File...
Traceback (most recent call last):
  File "file.py", line 10, in <module>
    html.request("GET", '/command=AB&time=' + str(F1))
  File "C:\Python33\lib\http\client.py", line 1049, in request
    self._send_request(method, url, body, headers)
  File "C:\Python33\lib\http\client.py", line 1087, in _send_request
    self.endheaders(body)
  File "C:\Python33\lib\http\client.py", line 1045, in endheaders
    self._send_output(message_body)
  File "C:\Python33\lib\http\client.py", line 890, in _send_output
    self.send(msg)
  File "C:\Python33\lib\http\client.py", line 828, in send
    self.connect()
  File "C:\Python33\lib\http\client.py", line 806, in connect
    self.timeout, self.source_address)
  File "C:\Python33\lib\socket.py", line 406, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno 11004] getaddrinfo failed
C:\Users\Me\Desktop\Coding>python file.py
输入IP:**.**.*****
正在读取文件。。。
回溯(最近一次呼叫最后一次):
文件“File.py”,第10行,在
request(“GET”,'/command=AB&time='+str(F1))
请求中第1049行的文件“C:\Python33\lib\http\client.py”
self.\u发送请求(方法、url、正文、标题)
文件“C:\Python33\lib\http\client.py”,第1087行,在发送请求中
self.endheaders(主体)
文件“C:\Python33\lib\http\client.py”,第1045行,在endheaders中
自发送输出(消息体)
文件“C:\Python33\lib\http\client.py”,第890行,在发送输出中
self.send(msg)
文件“C:\Python33\lib\http\client.py”,第828行,在send中
self.connect()
文件“C:\Python33\lib\http\client.py”,第806行,在connect中
self.timeout,self.source\u地址)
文件“C:\Python33\lib\socket.py”,第406行,在create\u connection中
对于getaddrinfo(主机、端口、0、SOCK_流)中的res:
socket.gaierror:[Errno 11004]getaddrinfo失败

所以我想出来了。为了避免badStatusLines和其他类似错误,我使用了sockets/urlib2。这样你就可以从网页上获得原始信息,而不必担心任何你无法控制的问题

下面是添加了套接字的代码片段

socket.setdefaulttimeout(timeout)
req = urllib2.Request(host)
response = urllib2.urlopen(req)
这是迄今为止我发现的唯一成功。感谢ejno让我走上正轨。

Windows在末尾('\n')添加了一个“换行符”,这与unix Windows=CRLF不同。我在读一个Windows ASCII文本文件时遇到了类似的问题。如果我只是将文件读入一个列表并打印出来,它会在两者之间添加一个空行。这给了我一个线索。我使用的是建立在urllib3之上的请求库

如果我使用

r = requests.get(url.strip('\n')) 
它很好用

r = requests.get(url)
错误百出

回溯(最近一次调用上次):文件 “C:\Python34\lib\site packages\requests\packages\urllib3\connectionpool.p y“,第516行,在urlopen中 body=body,headers=headers)文件“C:\Python34\lib\site packages\requests\packages\urllib3\connectionpool.p y“,第308行,在请求中 conn.request(方法,url,**httplib\u request\u kw)文件“C:\Python34\lib\http\client.py”,请求中的第1090行 self.\u发送请求(方法、url、正文、标题)文件“C:\Python34\lib\http\client.py”,第1128行,在发送请求中 self.endheaders(主体)文件“C:\Python34\lib\http\client.py”,第1086行,在endheaders中 self.\u发送输出(消息体)文件“C:\Python34\lib\http\client.py”,第924行,在发送输出中 self.send(msg)文件“C:\Python34\lib\http\client.py”,第859行,在send中 self.connect()文件“C:\Python34\lib\site packages\requests\packages\urllib3\connection.py”, 第146行,连接中 conn=self.\u new\u conn()文件“C:\Python34\lib\site packages\requests\packages\urllib3\connection.py”, 康涅狄格州新州125号线 (self.host、self.port)、self.timeout、**extra_kw)文件“C:\Python34\lib\site packages\requests\packages\urllib3\util\connection”。 py”,创建_连接中的第64行 对于socket.getaddrinfo(主机、端口、0、socket.SOCK_流)中的res:getaddrinfo中第530行的文件“C:\Python34\lib\socket.py” 对于_socket.getaddrinfo(主机、端口、系列、类型、协议、标志)中的res:socket.gaierro:[Errno 11001]getaddrinfo失败


这很管用,但现在我又收到了一条坏消息?我无法更改正在获取的文件,并且可以通过浏览器正常工作。有什么想法吗?
r = requests.get(url)