1

http.client を使用して、ホストから xml ファイルを読み取ろうとしています。urllib2 を使用しますが、xml ヘッダーの前に 3 つのスペースがあるため、BadStatusLine が返されます (変更できません)。だからこそ、私はこのルートを試しています。

私は今立ち往生しており、エラーが発生し続けています (getaddrinfo が失敗しました)。

以下は私のコードで、その下はトレースバックです。誰かが私が間違っていることをアドバイスできますか?

参考までに、ブラウザで動作するアドレスはhttp://machineIP:81/command=AB&time=2013-06-02

そのようにxmlにアクセスしても問題ありません。

事前に助けてくれてありがとう!

コード:

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

トレースバック:

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
4

2 に答える 2

1

Windows は末尾 ('\n') に「改行」文字を追加しますが、これは UNIX の Windows=CRLF とは異なります。Windows ASCII テキスト ファイルを読んでいて、同様の問題に遭遇しました。ファイルをリストに読み込んで印刷すると、2 つの間に空の行が追加されます。それは私に手がかりを与えました。urllib3 の上に構築された Requests ライブラリを使用していました。

私が使用する場合

r = requests.get(url.strip('\n')) 

それはうまく動作します。

r = requests.get(url)

エラーで爆破する

py"、859 行、send self.connect() ファイル内 "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 行目、_new_conn (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(host, port, 0, socket.SOCK_STREAM): ファイル "C:\Python34\lib\socket.py"、530 行目、_socket の res の getaddrinfo。 getaddrinfo(ホスト、ポート、ファミリ、タイプ、プロト、フラグ): socket.gaierror: [Errno 11001] getaddrinfo に失敗しました \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 行目、_new_conn (self.host、self.port)、self.timeout、**extra_kw 内) ファイル "C:\Python34\lib\site-packages\requests\packages\urllib3\util\繋がり。py"、64 行目、socket.getaddrinfo の res の create_connection(host, port, 0, socket.SOCK_STREAM): ファイル "C:\Python34\lib\socket.py"、530 行目、_socket の res の getaddrinfo。 getaddrinfo(ホスト、ポート、ファミリ、タイプ、プロト、フラグ): socket.gaierror: [Errno 11001] getaddrinfo に失敗しました \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 行目、_new_conn (self.host、self.port)、self.timeout、**extra_kw 内) ファイル "C:\Python34\lib\site-packages\requests\packages\urllib3\util\繋がり。py"、64 行目、socket.getaddrinfo の res の create_connection(host, port, 0, socket.SOCK_STREAM): ファイル "C:\Python34\lib\socket.py"、530 行目、_socket の res の getaddrinfo。 getaddrinfo(ホスト、ポート、ファミリ、タイプ、プロト、フラグ): socket.gaierror: [Errno 11001] getaddrinfo に失敗しました \Python34\lib\site-packages\requests\packages\urllib3\connection.py"、125 行目、_new_conn (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(host, port, 0, socket.SOCK_STREAM): ファイル "C:\Python34\lib\socket.py"、530 行目、_socket の res の getaddrinfo。 getaddrinfo(ホスト、ポート、ファミリ、タイプ、プロト、フラグ): socket.gaierror: [Errno 11001] getaddrinfo に失敗しました \Python34\lib\site-packages\requests\packages\urllib3\connection.py"、125 行目、_new_conn (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(host, port, 0, socket.SOCK_STREAM): ファイル "C:\Python34\lib\socket.py"、530 行目、_socket の res の getaddrinfo。 getaddrinfo(ホスト、ポート、ファミリ、タイプ、プロト、フラグ): socket.gaierror: [Errno 11001] getaddrinfo に失敗しました

于 2014-10-31T04:26:49.307 に答える