2017-05-15 8 views
0

私はPythonプログラミングには新しく、問題を調査しようとしましたが、まだ解決策を見つけることができませんでした。私は誰かが手伝ってくれることを望んでいる。xmlリクエストライブラリを使用して例外が発生する

私は、Webリレースイッチを有効または無効にするために使用されるIPアドレスにhttp getコールをかけるスクリプトを持っています。コードの相対的部分が、このようになります。

import requests 
r = requests.get('http://192.168.1.100/state.xml?relayState=1&noReply=0') 

上記ウェブリレースイッチをオンに成功したが、以下に示すようにウェブリレーからの応答は、例外メッセージの数を引き起こし、スクリプトの実行が停止します。私はスクリプトの目的のために何らかの応答を処理する必要はありませんが、スクリプトを適切に機能させるために必要な場合、私はそうします。私の感想は、1.1の代わりにxmlバージョン1.0を使用してWeb中継スイッチを中心に問題が回っていることです。私はまだ1.0を使用する要求を強制する方法に着陸することができませんでした。私は、Python 3.6.1

Traceback (most recent call last): 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 600, in urlopen 
    chunked=chunked) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 386, in _make_request 
    six.raise_from(e, None) 
    File "<string>", line 2, in raise_from 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 382, in _make_request 
    httplib_response = conn.getresponse() 
    File "C:\Program Files (x86)\Python36-32\lib\http\client.py", line 1331, in getresponse 
    response.begin() 
    File "C:\Program Files (x86)\Python36-32\lib\http\client.py", line 297, in begin 
    version, status, reason = self._read_status() 
    File "C:\Program Files (x86)\Python36-32\lib\http\client.py", line 279, in _read_status 
    raise BadStatusLine(line) 
http.client.BadStatusLine: <?xml version='1.0' encoding='utf-8'?> 



During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\adapters.py", line 423, in send 
    timeout=timeout 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 649, in urlopen 
    _stacktrace=sys.exc_info()[2]) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\packages\urllib3\util\retry.py", line 347, in increment 
    raise six.reraise(type(error), error, _stacktrace) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\packages\urllib3\packages\six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 600, in urlopen 
    chunked=chunked) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 386, in _make_request 
    six.raise_from(e, None) 
    File "<string>", line 2, in raise_from 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 382, in _make_request 
    httplib_response = conn.getresponse() 
    File "C:\Program Files (x86)\Python36-32\lib\http\client.py", line 1331, in getresponse 
    response.begin() 
    File "C:\Program Files (x86)\Python36-32\lib\http\client.py", line 297, in begin 
    version, status, reason = self._read_status() 
    File "C:\Program Files (x86)\Python36-32\lib\http\client.py", line 279, in _read_status 
    raise BadStatusLine(line) 
requests.packages.urllib3.exceptions.ProtocolError: ('Connection aborted.', BadStatusLine("<?xml version='1.0' encoding='utf-8'?>\r\n",)) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "E:/Software/Python/test3.py", line 3, in <module> 
    r = requests.get('http://192.168.1.100/state.xml?relayState=1') 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\api.py", line 70, in get 
    return request('get', url, params=params, **kwargs) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\api.py", line 56, in request 
    return session.request(method=method, url=url, **kwargs) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\sessions.py", line 488, in request 
    resp = self.send(prep, **send_kwargs) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\sessions.py", line 609, in send 
    r = adapter.send(request, **kwargs) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\requests\adapters.py", line 473, in send 
    raise ConnectionError(err, request=request) 
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("<?xml version='1.0' encoding='utf-8'?>\r\n",)) 
>>> 

答えて

0

を使用しているあなたはURLがhttpではなくhttpsをする必要がありますか?これは誰かの問題です:Python requests.exception.ConnectionError: connection aborted "BadStatusLine"

それ以外の場合は、エラーはサーバーからの応答であることを意味します。これは私があなたが制御していないと想定しています。誰でもそれを制御するサポートチケットを開くことができます。また、急いでいる場合は、例外をキャッチして無視することで対処できます。これはハッキーですが、応答が不要なので受け入れられるかもしれませんそして、あなたの要求はもう一方の端に成功したことを知っている:製品コードについては

try: 
    requests.get('http://192.168.1.100/state.xml?relayState=1&noReply=0') 
except requests.exceptions.ConnectionError as err: 
    if "BadStatusLine" in repr(err): 
     # TODO: be a responsible developer and figure out why I get BadStatusLine 
     pass 
    else: 
     # wasn't the error I was expecting, so raise it 
     raise 

を、私はエラーの底に取得したいと思いますが、開発時に、私はそう、次のような何かを行うことをいとわないかもしれません私は上に移動することができます。

+0

私はそれがhttpだと確信しています。ブラウザに同じコマンドを入力したときに気付きました。このXMLファイルには、スタイル情報が関連付けられていないようです。問題ありますか? 私はあなたのコードを試しましたが、私は以前の試みと同じ結果を得ましたが、それには次の追加のエラーメッセージがありました。 ファイル "E:\ Software \ Python \ test3.py"、行5、 (http.clientを除く)。BadStatusLine: NameError:name 'http'が定義されていません 「ハッキー」コードを使用しても問題ありませんが、私はいくつかの援助があればこれを解決することもできます。 – MarkK

+0

このエラーは、httpモジュールをインポートする必要があることを示しています。これをファイルの先頭に置きます:import http(上の編集コードを参照) –

+0

ブラウザのスタイルメッセージは無関係です.XSLがスタイルシートを参照していないことをブラウザに伝えるだけです。 –

0

私は上記のWebリレースイッチ製品の製造元のテクニカルサポートスペシャリストです。最近のサポートEメールではこのスレッドに言及しましたが、私はこれを越えて走るかもしれない他の情報のために情報を追加することは良いと思っていました。

かなり以前に設計されたいくつかの古いモジュールは、ハードウェアリソースが限られていて、XML応答用の完全なHTMLヘッダーをサポートしていませんでした。

数年前に製品が新しいハードウェアで再設計されました。下位互換性の理由から、/state.xmlレスポンスには、古いハードウェアシリーズのソフトウェアを開発したユーザーに対応するための完全なHTMLヘッダーがまだありません。

新しい製品では完全なHTMLヘッダーがサポートされるようになりましたが、/stateFull.xmlという別の要求を行う必要があります。

次のように元の例の正しいコードは次のようになります

import requests 
r = requests.get('http://192.168.1.100/stateFull.xml?relayState=1&noReply=0') 

注:最初の時間StackOverflowのに提出するので、私は正常に続く任意の規則を欠落を謝罪。

関連する問題