今回は、PythonのHTTPモジュールに焦点を当て、詳しく解説していきます。
オススメの読み物 PythonのReLU関数
Crisp Overview – Python HTTP モジュール
Pythonは、様々な階層で様々な操作を簡単に行うことができる多目的プログラミング言語です。
Pythonのモジュールでは、古典的な操作やカスタマイズされた/ユーザー定義の操作を実行するためのモジュールや組み込み関数の巨大な様々な付属しています。
それはデータスクレイピング、またはAPIやJSONデータパスを介して情報を取得することになると、我々は我々がWebのURLへの接続を開き、同じ上の応答操作を実行できるようにする関数が必要です。
PythonはHTTPモジュールを提供しています。
HTTPモジュールを使用すると、Web URLの接続を簡単に処理し、次のようなさまざまな操作を実行することができます。
- GETリクエスト
- POST リクエスト
- PUTリクエスト
- レスポンスヘッダからのヘッダ取得 など
上記の各機能をHTTPモジュールで見ていくことにします。
HTTPモジュールは、最新のHTTPリクエストを扱うために、urllibモジュールと一緒に使われることが多いです。
それでは、はじめましょう
1. HTTP 接続の確立
Web URL に対して何らかのリクエスト操作を行う前に、URL との接続を確立しておくことは非常に重要です。
HTTPモジュールでは、HTTPConnection()関数により、特定のポート(できれば80)でURLへの接続をタイムアウト時間付きで確立することができます。
構文は以下の通りです。
http.client.HTTPConnection( 'URL' , port, timeout = )
|
- URL。接続を確立する Web の URL。
- ポート。接続を確立する必要があるポート番号です。
- タイムアウト。接続が中断されるまでの猶予時間。
例えば、以下の様になります。
import http.client
request = http.client.HTTPConnection( 'www.google.com' , 80 , timeout = 10 )
print (request)
|
結果は、以下の通りになります。
<http.client.HTTPConnection object at 0x00000223BAD2DDD8 >
|
2. Python HTTP GET リクエスト
HTTPモジュールを使用すると、我々はWeb URLから応答を取得するために使用できるWeb URLにGETリクエストを実行することができます。
GETレスポンスでは、ウェブURLとギブアウェイ接続を確立し、URLから提供されるレスポンスデータを取得し、それを表すオブジェクトを割り当てます。
また、request()関数の reason 属性と status 属性を用いて、レスポンスデータの検証を行うこともできます。
構文は以下の様な感じです。
request( "GET" )
|
例えば、以下の様になります。
import http.client
data = http.client.HTTPSConnection( "www.askpython.com" )
data.request( "GET" , "/" )
response = data.getresponse()
print (response.reason)
print (response.status)
data.close() |
結果は、以下の通りになります。
OK 200 |
この記事もチェック:PythonでCOVID APIに接続してデータを取得する方法
3. Python HTTP Post & Put リクエスト
HTTP GETリクエストとは別に、POSTリクエストも使用できます。
これは、データを注入する、つまり、データをURLに投稿し、GETリクエストを使ってURLからレスポンスを取得することができます。
さらに、URL/APIのJSONデータに特定のデータを修正・追加したい場合は、PUTリクエストを使用することができます。
PUTリクエストでは、URLの既存のJSONにデータを追加し、GETリクエストでその接続を確認することができます。
構文 – POSTリクエスト。
request( 'POST' , '/post' , json_data, headers)
|
構文 – PUTリクエスト。
request( "PUT" , "/put" , json_data)
|
4. レスポンスからヘッダーリストを取得する
Web URL との接続を確立し、GET レスポンスを要求したら、今度は getheaders() 関数を使ってレスポンスからヘッダーデータを抽出・取得することができます。
getheaders() 関数は、GET レスポンスに含まれるヘッダーデータのリストを表します。
構文は以下のとおりです。
request.getheaders() |
例えば、以下の様になります。
import http.client
data = http.client.HTTPSConnection( "www.askpython.com" )
data.request( "GET" , "/" )
response = data.getresponse()
header = response.getheaders()
print (header)
print (response.reason)
print (response.status)
data.close() |
結果は以下の通りです。
[( 'Connection' , 'Keep-Alive' ), ( 'Content-Type' , 'text/html; charset=UTF-8' ), ( 'Link' , '<https://www.askpython.com/wp-json/>; rel="https://api.w.org/"' ), ( 'Link' , '</wp-content/themes/astra/assets/css/minified/style.min.css>; rel=preload; as=style,</wp-content/themes/astra/assets/css/minified/menu-animation.min.css>; rel=preload; as=style,</wp-includes/css/dist/block-library/style.min.css>; rel=preload; as=style,</wp-content/plugins/wp-to-twitter/css/twitter-feed.css>; rel=preload; as=style,</wp-content/plugins/easy-table-of-contents/vendor/icomoon/style.min.css>; rel=preload; as=style,</wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css>; rel=preload; as=style,</wp-content/themes/obsidian/style.css>; rel=preload; as=style' ), ( 'Etag' , '"294191-1623490484;;;"' ), ( 'X-LiteSpeed-Cache' , 'hit' ), ( 'Transfer-Encoding' , 'chunked' ), ( 'Date' , 'Sun, 13 Jun 2021 07:30:37 GMT' ), ( 'Server' , 'LiteSpeed' )]
OK 200 |
まとめ
ここまでで、このトピックは終了です。
何か質問があれば、お気軽にコメントください。
Pythonプログラミングに関連するこのような記事のために、私たちと一緒にご期待ください。