Python プログラミング

[Python] HTTP通信のPOSTでXMLデータを送信する方法

投稿日:

こんにちは!シミダイ(@shimidai2100)です。

Pythonを使用してHTTPリクエストでXMLデータをPOSTする方法を紹介したいと思います。

YahooショッピングAPIAmazonAPIではデータ送信時にAPI通信時にXML形式のデータをPOSTします。

今回はPython3標準の「urllib」ライブラリを利用してHTTP通信を行います。

※ 「requests」ライブラリを使用することもできます。


ソースコード全文

まずは今回使用するソースコードの全文を紹介します。

今回のサンプルでは戻り値がXML形式で返ってくることを想定しております。

なのでBeautifulSoup4を使用してXML形式をタグ解析できるようにしております。

BeautifulSoup4については以下の記事で解説しております。

[Python] BeautifulSoup4の使い方とインストール方法

こんにちは!シミダイ(@shimidai2100)です。 PythonでWebスクレイピング時にオススメのライブラリ「Beautiful Soup 4」です。 Webスクレイピングを活用することで、W ...

続きを見る

ヘッダー情報を付与する

ヘッダー情報を渡すためにはPythonの「ディクショナリ」を使用する必要があります。

また送信ファイルはXML形式ですよ!とヘッダー情報に渡すために「Content-type : application/xml;」を指定します。

ソースは以下になります。

各APIに渡すヘッダーの値は「:」コロンで指定します。

参考HTTPリクエストヘッダー

XMLデータをバイナリにエンコード

urllib.request」でデータをPOSTするためには「バイナリコード」に変換した状態で送信する必要があります。

XML形式の文字列をバイナリコードを変換するには「encode()」メソッドを使用します。

以下がソースコードになります。今回の例では文字コードをUTF-8に変換しております。

「urllib.request.Requst」でリクエストオブジェクトの作成

urllib.request.Request」でオブジェクトを作成します。

上記「URL」、「送信データ」、「Method(GET/POSTなど)」、「ヘッダー」を指定してオブジェクトを作成します

以下がソースコードになります。

参考urllib.requestのマニュアル

「urllib.request.urlopen」でPOSTリクエスト

urllib.request.urlopen」はURLに直接リクエストを送ることもできますし、リクエストオブジェクトを渡してURLにリクエストを送ることができます。

今回「urllib.request.urlopen」で先ほど作成したリクエストオブジェクトをPOSTします。

また「with」を使用することで煩わしいリクエスト処理のお作法簡略化させることができます。

以下がソースコードになります。例では返ってきた値をutf-8形式でデコードし、BeautifulSoup4でタグ解析を行っています。

参考urllib.requestのマニュアル

「urllib.error.HTTPError」でエラーハンドリング

urllib.error.HTTPError」と「try~except」を利用することでHTTPリクエスト失敗時の挙動は判別することができます。

404・401・403などパターンに合わせてエラーハンドリングすることも可能です。

以下ソースコードになります。

以下にPythonのエラーハンドリングについて解説しておりますので参考にしてみてください。

[Python] 例外処理「try~except~else~finally」の使い方

こんにちは!シミダイ(@shimidai2100)です。 Pythonの例外処理で使用する「try~except~else~finally」の使い方を紹介します。 例外処理を使用することで、pytho ...

続きを見る

 

スポンサードリンク

関連記事

-Python, プログラミング

Translate »

Copyright© shimidai2100 , 2018 All Rights Reserved.