dポイントプレゼントキャンペーン実施中!

requestsを使用して日本語を含むXMLをdataパラメータに設定して送信したいのですが、エラーが解消できず、こちらに質問させていただきました。

【事象と試したこと】
〇スクリプト(url、headersは省略)
payload = "<test>あいうえお</test>"
response = requests.request("POST", url, headers=headers, data=payload)

〇エラー
requestsにて、
「UnicodeEncodeError: 'latin-1' codec can't encode characters in position 6-10: Body ('あいうえお') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.」

XMLに日本語を含めると上記エラーが発生してリクエスト送信できませんが、全文ASCII文字だとエラーにはならずに送信できました。

<上記のエラーをうけて試したこと>
日本語の部分のみUTF-8エンコードすればよいかと思い、以下のようにしましたが、payload に値を設定するところでエラーになりました。

〇スクリプト
strText="あいうえお"
payload = "<test>" + strText.encode('utf-8') + "</test>"
response = requests.request("POST", url, headers=headers, data=payload)

〇エラー
TypeError: can only concatenate str (not "bytes") to str

-----------------------------------------------------------------

【質問】
日本語を含むXMLをrequestsを使用して送信する場合には日本語をエンコードする必要があるように思います。その方法についてご教示をお願いいたします。

A 回答 (1件)

サーバー側がどう処理するかに依りますが、普通は、


import urllib.parse

payload = "<test>" + urllib.parse.quote(strText) + "</test>"
でしょうか。
    • good
    • 1
この回答へのお礼

なるほど、こういう便利なライブラリがあるんですね!
おかげさまでリクエストがサーバに到達しました。

勉強になりました。ありがとうございました!

お礼日時:2022/02/27 13:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!