Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでGET・POSTリクエストを送信する方法|requestsモジュールの基本

Pythonは、Webページからデータを取得するだけでなく、Webサイトへデータを送信(投稿)することもできます。標準ライブラリのurllibやサードパーティ製のhttplib2など、HTTP通信に利用できるモジュールは複数ありますが、その中でもrequestsモジュールが最もシンプルで直感的に扱えます。GET・POSTメソッドを使ったプログラムを、短くて読みやすいコードで記述できるのが大きな魅力です。

requestsモジュールは標準ライブラリには含まれていないため、未インストールの場合はまず以下のコマンドでインストールしてください。

pip install requests

GETメソッドでデータを取得する

GETメソッドは、指定したURLからデータを取得するためのHTTPメソッドです。requestsモジュールではrequests.get()を呼び出すだけで簡単に実行できます。以下の例では、Webサイトにアクセスし、レスポンスから文字エンコーディング、ステータスコード、レスポンスタイム、ヘッダー情報、さらにHTML本文の一部を取得して表示しています。

サンプルコード

import requests

req = requests.get('https://www.tutorialspoint.com/')

# ページの文字エンコーディング
e = req.encoding
print('Encoding:', e)

# HTTPステータスコード
s = req.status_code
print('Response code:', s)

# レスポンスタイム
t = req.elapsed
print('Response Time:', t)

# レスポンスヘッダーのContent-Type
t = req.headers['Content-Type']
print('Header:', t)

# ページ本文(HTML)の一部を表示
z = req.text
print('\nSome text from the web page:\n', z[0:200])

実行結果

このコードを実行すると、次のような出力が得られます。

Encoding: UTF-8
Response code: 200
Response Time: 0:00:00.103850
Header: text/html; charset=UTF-8

Some text from the web page:
<html lang="en-US">
<head>
Bas ...

ステータスコード「200」はリクエストが正常に成功したことを意味します。また、req.elapsedからはサーバーとのやり取りにかかった時間を、req.headersからはContent-Typeなどのヘッダー情報を確認できます。

POSTメソッドでデータを送信する

POSTメソッドは、主にフォーム入力の内容などをサーバーへ送信し、サーバー側のデータを作成・更新する際に使われるHTTPメソッドです。requestsモジュールではrequests.post()を使用します。URLとdataパラメータに辞書形式のデータを渡すだけで、HTMLフォームからの送信と同じようにデータを送れます。

以下の例では、HTTPリクエストのテストに便利なhttpbin.orgに対して、ユーザー名とパスワードのデータをPOST送信し、サーバーが受け取った内容をレスポンスとして確認しています。

サンプルコード

import requests

in_values = {'username': 'Jack', 'password': 'Hello'}
res = requests.post('https://httpbin.org/post', data=in_values)
print(res.text)

実行結果

このコードを実行すると、送信したデータがサーバーにどのように届いたかを示すJSON形式のレスポンスが返されます。

{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "password": "Hello",
    "username": "Jack"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Content-Length": "28",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.22.0",
    "X-Amzn-Trace-Id": "Root=1-5ef75488-969f97a68bb72642b97b6d50"
  },
  "json": null,
  "origin": "122.xxx.yy.zzz",
  "url": "https://httpbin.org/post"
}

レスポンスのformフィールドを見ると、送信したusernamepasswordが正しくサーバーに届いていることが分かります。なお、実際の開発ではパスワードなどの認証情報をコード内に直接書かず、環境変数などで管理するのが安全です。

まとめ

requestsモジュールを使えば、GETによるデータ取得もPOSTによるデータ送信も、わずか数行のコードで実装できます。GETはrequests.get()でURLから情報を取得し、POSTはrequests.post()data引数を渡すことでフォームデータを送信できます。Web APIとの連携やスクレイピングの基礎として、ぜひ活用してみてください。

  1. PythonとScrapyで実現するWebスクレイピング入門:インストールからデータ抽出まで

    クローラー(Web巡回プログラム)を開発するためのフレームワークの中でも、特に優れているのが「Scrapy」です。Scrapyは人気の高いWebスクレイピング・クローリングフレームワークであり、高レベルな機能を提供することで、Webサイトからのデータ抽出を格段に簡単にしてくれます。本記事では、Scrapyのインストール方法から、実際にWebページを取得し、タイトルやリンクなどの情報を抽出するまでの一連の流れを解説します。ScrapyのインストールWindows環境へのScrapyのインストールは非常に簡単です。pipを使う方法と、Anacondaを利用している場合はcondaを使う方法の2通り

  2. MacでPython 3にアップグレードして使いこなす方法

    購入したばかりの新しいMacには、必要なソフトウェアの最新版がすべて入っていると思いがちですが、ユーザー向けアプリについては概ね正しくても、基盤となるフレームワークに関しては話が別です。安定版の最新リリースがPython 3.5であるにもかかわらず、新しいMacには今なおPython 2.7.10がプリインストールされています。バージョン間の差が大きく感じられるのはそのためです。ただし、新しいバージョンが必ずしも優れているとは限りません。Python 3はPython 2との後方互換性を持たず、多くの開発者は依然としてPython 2を使い続けているのです。 2to3を使うか、使わないか?