Pythonsリクエストライブラリを使用してURLにPOSTデータを送信しようとしています。外部ファイルからPython要求ライブラリを使用してURLにデータをPOSTできません
スクリプトで投稿データを含む複数行の文字列変数を設定してみると、すべて正常に動作します。
同じデータを含む外部ファイルを読み込もうとすると、無効なXMLがあると思うので、私が投稿しているアプリケーションサーバーで要求が失敗します。例えば
:この作品
starturl="http://myserver.example.com/location/where/I/post"
username=user
password=mypassword
# Set the XML data
xmldata="""<?xml version="1.0" encoding="utf-8"?>
(Lots more xml)
"""
# POST the job data
session = requests.Session()
request = session.post(starturl, auth=(username,password), data=xmldata, headers=post_headers)
サーバー側のアプリケーションがうまく要求を処理します。しかし、私が行う唯一の変更は、外部ファイルからXMLデータを読み取ることである場合、これはもはや機能しません。
これは、その後
xmlfile="/path/to/my/xmldata.xml"
xmldata = open(xmlfile,'r')
session = requests.Session()
request = session.post(start_url, auth=(username,password), data=xmldata.read(), headers=post_headers)
サーバー側のアプリケーションを、動作しないとのエラー:
"Data at the root level is invalid. Line 1, position 1"
私はのリクエストボディに差がある見ることができるのwiresharkを検査し、私の役職。それが動作すると三つの小さなドットがどこか
から登場している:
Content-Type: application/xml
Authorization: Basic c3BvdGFkbTpQQHNzdzByZA==
<?xml version="1.0" encoding="utf-8"?>
それが失敗した場合:
Content-Type: application/xml
Authorization: Basic c3BvdGFkbTpQQHNzdzByZA==
...<?xml version="1.0" encoding="utf-8"?>
私は3つの主要なドットが表示されるように引き起こしているかわからないんだけどリクエストの本文に私はソースXMLファイルを検査し、そこから改行を取り除こうとしました。何もこのトリックをやっていないようですね?
さて、読んでいなくても、単にファイル 'xmldata'のデータでリクエストを投稿することができます。ドキュメントの[this](http://docs.python-requests.org/ja/master/user/advanced/#streaming-uploads)の部分を参照してください。 'xmldata'がオープンされているところで、' request = session.post(starturl、auth =(username、password)、data = xmldata、headers = post_headers) 'を使ってください。しかし、これがあなたの問題を解決するかどうかはわかりません。 –
バイナリ読み取りで試してください: 'xmldata = open(xmlfile、 'rb')'エラーを再現できない限り、正確な答えはありません。 –
xmlファイルを持たずにデバッグするのは不可能ですが、ファイルの先頭にBOMがあります。 Microsoftは、すべてのUTF-8ファイルに無駄なBOMを置くことを主張していることで有名です。 'codecs.BOM_UTF8'シーケンス(' '\ xef \ xbb \ xbf')のファイルの最初の3文字を確認し、それがあればそれを取り除くことができます。 –