1. TOP
  2. ブログ
  3. PythonでHTTP通信を行う HTTPの基礎も解説

PythonでHTTP通信を行う HTTPの基礎も解説

Pythonには「Django」「Flask」といったフレームワークがあり、フレームワークを利用した開発では、HTTP通信のことを知らなくても、それなりにアプリケーションを作ることができます。
しかし、HTTPはWebサーバーとクライアントの通信の土台であり、何か問題が起きた時にHTTPの仕組みを知っておかないと対処できない場合もあります。
この記事ではHTTPについて説明し、PythonでHTTP通信を行う方法について解説していきます。

 

 

HTTPとは何か?

 

HTTPは、ブラウザがリクエストを発行し、サーバーがレスポンスを返すというリクエスト・レスポンス型のプロトコルです。
ブラウザが発行するリクエストには、メソッド、URL、HTTPのバージョンといった情報が含まれています。メソッドはリクエストの種類を表すもので、GET、POST、PUT、DELETEなど8つのメソッドがありますが、GETとPOSTでHTTP通信の大半を占めています。
ブラウザからのリクエストに対して、Webサーバーから送られるレスポンスには、ステータスライン、メッセージヘッド、メッセージボディが含まれています。
ステータスコードはリクエストの状態を表すもので、「HTTP/1.1 200 OK」のように記述されています。インターネット上でウェブサイトを検索している時、「404 Not Found」というレスポンスが返ってくることがあると思いますが、あれがステータスコードです。メッセージヘッダにはレスポンスに関する付加的な情報が含まれ、メッセージボディにはHTMLファイルなどのコンテンツが入っています。

 

GETメソッドで情報を渡す

 

GETメソッドは、リクエストを発行する際に情報を付与することができます。例えば、プログラミングに関する情報共有サイトである「Qiita」でHTTPを検索すると、次のようなURLが表示されます。

https://qiita.com/search?q=http

通常のURLの後に「?」(クエスチョンマーク)があるかと思いますが、この部分のことをクエリ文字列と呼び、入力された文字列などをWebサーバーに渡しています。GETメソッドはクエリ文字列を使用してサーバーに情報を渡しています。

 

POSTメソッドで情報を渡す

 

POSTメソッドで情報を渡す際はクエリ文字列を使用せず、メッセージボディを使用します。GETメソッドで送る情報量には制限がありますが、POSTメソッドではたくさんのデータを送ることができます。また、GETメソッドはURLに情報が添付されるので他人から見えてしまいますが、POSTメソッドでは情報が見られることはなく安全に使用することができます。

 

 

PythonによるHTTPの実装

 

ここからPythonを用いてHTTPを実装する方法を紹介していきます。PythonにはHTTP通信を行うためのモジュールやライブラリが用意されていますので、それらの使用法について説明していきます。

 

urllib.requestでGET通信を行う

 

urllib.requestはPythonに用意されている標準のモジュールです。urllib.requestを使用すればGETやPOSTのHTTP通信を行えますし、Basic認証やプロキシ等も使うことができます。
以下はurllib.requestを利用してGETメソッドを実装するコードです。

import urllib.request
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as response:
the_page = response.read()

urlと書かれているところに対象のURLを記載し、URLの後に「?パラメータ1=値1&パラメータ2=値2」のように記述します。「response」はオブジェクトで、通信結果を保持しています。

 

RequestsでGET通信を行う

 

Requestsはサードパーティ製のライブラリで、urllib.requestと同じくHTTP通信を実装することができます。urllib.requestよりも直感的でわかりやすく、インストールできるのであればRequestsをおすすめします。
Requestsでは、request.get()でHTTPのGET通信を行い、Responseオブジェクトで結果を取得することができます。

import requests
url = ‘https://example.com/’
example = {‘key1’ : ’value1’ ,’key2’ : ’value2’}
response = requests.get(url, params=example)

request.getの第2引数であるparamsの箇所にパラメータを指定します。

 

以上、HTTPとPythonによるHTTPの実装について解説してきました。HTTP通信を実装するのは難しいと感じるかもしれませんが、ライブラリを使用すれば比較的簡単に実装することができます。
しかし、HTTPについての基本的な知識が必要ですので、ウェブサイトや書籍を参考にしながらまずはHTTPについて理解を深めていきましょう。

 

▼キャパの公式Twitter・FacebookではITに関する情報を随時更新しています!

 

 

    カテゴリ一覧

    PAGE TOP