首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python http.client getaddrinfo失败

Python http.client getaddrinfo失败
EN

Stack Overflow用户
提问于 2013-06-04 23:40:28
回答 2查看 16.1K关注 0票数 1

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

我现在卡住了,我一直收到一个错误(getaddrinfo失败)。

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

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

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

提前感谢大家的帮助!

代码:

代码语言:javascript
复制
import http.client
import datetime

IP = input("Enter the IP: ")
PT = str(81)
F1 = datetime.date.today() - datetime.timedelta(days=2)

print("Reading File...")
html = http.client.HTTPConnection('http://' + IP  , port= PT)
html.request("GET", '/command=AB&time=' + str(F1))
r1 = html.getresponse()

print("Writing to file...")
out = r1.read()
f = open('Files/' + IP + '-' + str(F1) + '.xml', 'wb')
print("Writing to file...")
f.write(out)
f.close()
print("Done.")

回溯:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-11 01:48:10

所以我想通了。为了避免badStatusLines和其他类似的错误,我使用了套接字/urllib2。这样你就可以从网页中获取原始信息,而不必担心任何你无法控制的问题。

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

代码语言:javascript
复制
socket.setdefaulttimeout(timeout)
req = urllib2.Request(host)
response = urllib2.urlopen(req)

这是到目前为止我发现的唯一的成功。感谢ejno让我走上了正确的道路。

票数 1
EN

Stack Overflow用户

发布于 2014-10-31 12:26:49

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

如果我使用

代码语言:javascript
复制
r = requests.get(url.strip('\n')) 

它工作得很好。

代码语言:javascript
复制
r = requests.get(url)

带错误的炸弹发射

回溯(最近的调用):文件"C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.p y",行516,在url_ "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.p _ body=body,headers=headers中)文件_body=body_ y",行308,在_make_request _conn.request(方法,url,**httplib_request_kw)中文件"C:\Python34\lib\http\client.py",行1090,在request self._send_request(method,url,body,headers)文件"C:\Python34\lib\http\client.py",行1128,在_send_request self.endheaders(body)文件"C:\Python34\lib\http\client.py",行1086,在endheaders self._send_output(message_body)文件"C:\Python34\lib\http\client.py",行924,在connect conn = _send_output ()文件"C:\Python34\lib\site-packages\requests\packages\urllib3\connection.py",行146,在connect conn= self._new_conn()文件"C:\Python34\lib\site-packages\requests\packages\urllib3\connection.py",行125,在C:\Python34\lib\http\client.py (self.host,self.port)、self.timeout、**extra_kw)文件"C:\Python34\lib\site-packages\requests\packages\urllib3\util\connection.py",第64行,socket.getaddrinfo中res的create_connection (主机,端口,0,socket.SOCK_STREAM):文件"C:\Python34\lib\socket.py",第530行,_socket.getaddrinfo中res的getaddrinfo (主机,端口,系列,类型,协议,标志):socket.gaierror: Errno 11001 getaddrinfo failed

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16921995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档