リクエスト-クイックガイド

Requestsは、Webアプリケーションでhttp要求/応答を処理するための簡単な機能を提供するHTTPライブラリです。ライブラリはPythonで開発されています。

PythonRequestsの公式ウェブサイト。 https://2.python-requests.org/en/master/ リクエストを次のように定義します-

Requestsは、Python用のエレガントでシンプルなHTTPライブラリであり、人間向けに構築されています。

リクエストの特徴

リクエストの機能については、以下で説明します-

リクエスト

Pythonリクエストライブラリには、Httpリクエストを処理するために利用できる使いやすいメソッドがあります。パラメータの受け渡しと、GET、POST、PUT、DELETEなどのリクエストタイプの処理は非常に簡単です。

応答

必要な形式で応答を取得できます。サポートされているのは、テキスト形式、バイナリ応答、json応答、およびraw応答です。

ヘッダー

ライブラリを使用すると、要件に応じて新しいヘッダーを読み取ったり、更新したり、送信したりできます。

タイムアウト

タイムアウトは、Pythonリクエストライブラリを使用して、リクエストしているURLに簡単に追加できます。サードパーティのURLを使用していて、応答を待っていることがあります。

URLがそのタイムアウト内に応答する場合があるため、URLにタイムアウトを設定することをお勧めします。これは、タイムアウトが原因で発生する応答またはエラーです。そうしないと、どちらかがその要求を無期限に待機する可能性があります。

エラー処理

リクエストモジュールはエラー処理をサポートし、その一部には接続エラー、タイムアウトエラー、TooManyRedirects、Response.raise_for_statusエラーなどがあります。

クッキー

ライブラリを使用すると、要求されたURLの読み取り、書き込み、および更新を行うことができます。

セッション

データを維持するには、セッションが必要なリクエストの間に必要です。したがって、同じホストが何度も呼び出された場合は、TCP接続を再利用できます。これにより、パフォーマンスが向上します。

SSL証明書

SSL証明書は、安全なURLに付属するセキュリティ機能です。リクエストを使用すると、指定されたhttpsURLのSSL証明書も検証されます。SSL検証は、リクエストライブラリでデフォルトで有効になっており、証明書が存在しない場合はエラーをスローします。

認証

HTTP認証はサーバー側で行われ、クライアントがURLを要求すると、ユーザー名、パスワードなどの認証情報を要求します。これは、クライアントとサーバー間で交換される要求と応答の追加のセキュリティです。

Pythonリクエストライブラリを使用する利点

Python RequestsLibraryを使用する利点は次のとおりです-

  • 使いやすく、指定されたURLからデータを取得します。

  • Requestsライブラリを使用して、Webサイトからデータを取得できます。

  • リクエストを使用して、指定されたURLのデータを取得、投稿、削除、更新できます。

  • クッキーとセッションの取り扱いはとても簡単です。

  • セキュリティは、認証モジュールのサポートによっても処理されます。

この章では、リクエストのインストールについて説明します。Requestsモジュールの操作を開始するには、最初にPythonをインストールする必要があります。だから私たちは以下に取り組むつもりです-

  • Pythonをインストールする
  • インストールリクエスト

Pythonのインストール

Pythonの公式サイトにアクセスします。 https://www.python.org/downloads/以下に示すように、Windows、Linux / Unix、およびMacOSで利用可能な最新バージョンをクリックします。利用可能な64ビットまたは32ビットOSに従ってPythonをダウンロードします。

ダウンロードしたら、.exeファイルをクリックし、手順に従ってシステムにpythonをインストールします。

pythonパッケージマネージャー、つまりpipも、上記のインストールでデフォルトでインストールされます。システム上でグローバルに機能させるには、Pythonの場所をPATH変数に直接追加します。インストールの開始時に同じことが表示され、[パスに追加]というチェックボックスをオンにすることを忘れないでください。チェックを忘れた場合は、以下の手順でPATHに追加してください。

PATHに追加するには、次の手順に従います-

コンピュータアイコンを右クリックし、[プロパティ]> [システムの詳細設定]をクリックします。

以下のような画面が表示されます-

上記のように環境変数をクリックします。以下のような画面が表示されます-

[パス]を選択して[編集]ボタンをクリックし、最後にPythonのロケーションパスを追加します。それでは、Pythonのバージョンを確認しましょう。

Pythonのバージョンを確認する

E:\prequests>python --version
Python 3.7.3

インストールリクエスト

Pythonがインストールされたので、Requestsをインストールします。

Pythonがインストールされると、Pythonパッケージマネージャー、つまりpipもインストールされます。以下は、pipのバージョンを確認するコマンドです。

E:\prequests>pip --version
pip 19.1.1 from c:\users\xxxxx\appdata\local\programs\python\python37\lib\site-p
ackages\pip (python 3.7)

pipがインストールされており、バージョンは19.1.1です。次に、pipを使用してRequestsモジュールをインストールします。

コマンドは以下のとおりです-

pip install requests
E:\prequests>pip install requests
Requirement already satisfied: requests in c:\users\xxxx\appdata\local\programs
\python\python37\lib\site-packages (2.22.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\kamat\appdata\loca
l\programs\python\python37\lib\site-packages (from requests) (2019.3.9)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\use
rs\xxxxx\appdata\local\programs\python\python37\lib\site-packages (from requests
) (1.25.3)
Requirement already satisfied: idna<2.9,>=2.5 in c:\users\xxxxxxx\appdata\local\pr
ograms\python\python37\lib\site-packages (from requests) (2.8)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\xxxxx\appdata\l
ocal\programs\python\python37\lib\site-packages (from requests) (3.0.4)

モジュールはすでにインストールされているため、コマンドプロンプトに「要件はすでに満たされています」と表示されます。インストールされていない場合は、インストールに必要なパッケージがダウンロードされます。

インストールされているリクエストモジュールの詳細を確認するには、次のコマンドを使用できます-

pip show requests
E:\prequests>pip show requests
Name: requests
Version: 2.22.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: c:\users\xxxxx\appdata\local\programs\python\python37\lib\site-package
S
Requires: certifi, idna, urllib3, chardet
Required-by:

Requestsモジュールのバージョンは2.22.0です。

Pythonのリクエストは、クライアントとサーバー間でデータを交換するのに役立つHTTPライブラリです。ユーザーの詳細を入力する必要があるフォーム付きのUIがあるとします。そのため、入力したら、データを保存するために、クライアントからサーバーへのHttpPOSTまたはPUTリクエストにすぎないデータを送信する必要があります。

データが必要な場合は、サーバーからデータをフェッチする必要があります。これもHttpGETリクエストです。クライアントがデータを要求するときのクライアントと、必要なデータで応答するサーバーとの間のデータ交換。クライアントとサーバーの間のこの関係は非常に重要です。

指定されたURLに対してリクエストが行われ、セキュアURLまたは非セキュアURLの可能性があります。

URLへのリクエストは、GET、POST、PUT、DELETEを使用して実行できます。最も一般的に使用されるのはGETメソッドで、主にサーバーからデータをフェッチする場合に使用されます。

たとえば、クエリ文字列としてURLにデータを送信することもできます-

https://jsonplaceholder.typicode.com/users?id=9&username=Delphine

したがって、ここでは、ID = 9とユーザー名= DelphineをURLに渡します。すべての値は、疑問符(?)の後にキーと値のペアで送信され、複数のパラメーターが&で区切られたURLに渡されます。

リクエストライブラリを使用して、文字列ディクショナリを使用してURLを次のように呼び出します。

ここで、URLへのデータは文字列の辞書として送信されます。id = 9およびusername = Delphineを渡したい場合は、次のように実行できます-

payload = {'id': '9', 'username': 'Delphine'}

リクエストライブラリは次のように呼び出されます-

res = requests.get('https://jsonplaceholder.typicode.com/users', params=payload')

POSTを使用すると、次のように実行できます。

res = requests.post('https://jsonplaceholder.typicode.com/users', data = {'id':'9', 'username':'Delphine'})

PUTの使用

res = requests.put('https://jsonplaceholder.typicode.com/users', data = {'id':'9', 'username':'Delphine'})

DELETEの使用

res = requests.delete('https://jsonplaceholder.typicode.com/users')

Httpリクエストからの応答は、テキストエンコード形式、バイナリエンコード、json形式、または生の応答にすることができます。リクエストとレスポンスの詳細については、次の章で詳しく説明します。

この章では、requestsモジュールの操作方法を理解します。以下を検討します-

  • HTTPリクエストの作成。
  • HTTPリクエストへのパラメータの受け渡し。

HTTPリクエストの作成

Httpリクエストを行うには、最初に以下に示すようにリクエストモジュールをインポートする必要があります-

import requests

ここで、requestsモジュールを使用してURLを呼び出す方法を見てみましょう。

URLを使用しましょう- https://jsonplaceholder.typicode.com/users コード内で、RequestsModuleをテストします。

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.status_code)

URL- https://jsonplaceholder.typicode.com/usersrequests.get()メソッドを使用して呼び出されます。URLの応答オブジェクトはgetdata変数に格納されます。変数を出力すると、200の応答コードが返されます。これは、応答が正常に取得されたことを意味します。

出力

E:\prequests>python makeRequest.py
<Response [200]>

応答からコンテンツを取得するには、次を使用して取得できます getdata.content 以下に示すように-

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)

getdata.contentは、応答で使用可能なすべてのデータを出力します。

出力

E:\prequests>python makeRequest.py
b'[\n {\n  "id": 1,\n  "name": "Leanne Graham",\n  "username": "Bret",\n
"email": "[email protected]",\n  "address": {\n  "street": "Kulas Light
",\n  "suite": "Apt. 556",\n  "city": "Gwenborough",\n  "zipcode": "
92998-3874",\n  "geo": {\n "lat": "-37.3159",\n  "lng": "81.149
6"\n }\n },\n  "phone": "1-770-736-8031 x56442",\n  "website": "hild
egard.org",\n  "company": {\n "name": "Romaguera-Crona",\n  "catchPhr
ase": "Multi-layered client-server neural-net",\n  "bs": "harness real-time
e-markets"\n }\n }

HTTPリクエストへのパラメータの受け渡し

URLをリクエストするだけでは不十分であり、パラメータをURLに渡す必要もあります。

パラメータは、ほとんどの場合、キーと値のペアとして渡されます。

 https://jsonplaceholder.typicode.com/users?id=9&username=Delphine

したがって、id = 9とusername = Delphineがあります。次に、そのようなデータをリクエストHttpモジュールに渡す方法を説明します。

import requests
payload = {'id': 9, 'username': 'Delphine'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users', params=payload)
print(getdata.content)

詳細は、キーと値のペアのオブジェクトペイロードに格納され、get()メソッド内のparamsに渡されます。

出力

E:\prequests>python makeRequest.py
b'[\n {\n "id": 9,\n "name": "Glenna Reichert",\n "username": "Delphin
e",\n "email": "[email protected]",\n "address": {\n "street":
"Dayna Park",\n "suite": "Suite 449",\n "city": "Bartholomebury",\n
"zipcode": "76495-3109",\n "geo": {\n "lat": "24.6463",\n
"lng": "-168.8889"\n }\n },\n "phone": "(775)976-6794 x41206",\n "
website": "conrad.com",\n "company": {\n "name": "Yost and Sons",\n
"catchPhrase": "Switchable contextually-based project",\n "bs": "aggregate
real-time technologies"\n }\n }\n]'

応答でid = 9とusername = Delphineの詳細を取得しています。

確認したい場合は、URLへの応答オブジェクトを使用してパラメーターを渡した後のURLの外観。

import requests
payload = {'id': 9, 'username': 'Delphine'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users', params=payload)
print(getdata.url)

出力

E:\prequests>python makeRequest.py
https://jsonplaceholder.typicode.com/users?id=9&username=Delphine

この章では、requestsモジュールから受信した応答の詳細について説明します。以下の詳細について説明します-

  • 応答を得る
  • JSON応答
  • RAWレスポンス
  • バイナリ応答

応答を得る

request.get()メソッドを使用してURLにリクエストを送信します。

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users');

getdataには応答オブジェクトがあります。応答のすべての詳細が含まれています。私たちは、(。使用して2つの方法で応答を得ることができ、テキスト)と(。コンテンツを)。response.textを使用すると、以下に示すようにデータがテキスト形式で返されます。

E:\prequests>python makeRequest.py
[
 {
   "id": 1,
   "name": "Leanne Graham",
   "username": "Bret",
   "email": "[email protected]",
   "address": {
   "street": "Kulas Light",
   "suite": "Apt. 556",
   "city": "Gwenborough",
   "zipcode": "92998-3874",
   "geo": {
   "lat": "-37.3159",
   "lng": "81.1496"
   }
  },
   "phone": "1-770-736-8031 x56442",
   "website": "hildegard.org",
   "company": {
   "name": "Romaguera-Crona",
   "catchPhrase": "Multi-layered client-server neural-net",
   "bs": "harness real-time e-markets"
  }
},

以下に示すように、URLのソースを表示すると、ブラウザに表示される応答と同じ応答が表示されます。

.html URLを試して、response.textを使用してコンテンツを表示することもできます。これは、ブラウザーでの.htmlURLのソースコンテンツの表示と同じになります。

それでは、同じURLに対してresponse.contentを試して、出力を確認してみましょう。

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)

出力

E:\prequests>python makeRequest.py
b'[\n {\n "id": 1,\n "name": "Leanne Graham",\n "username": "Bret",\n
"email": "[email protected]",\n "address": {\n "street": "Kulas Light
",\n "suite": "Apt. 556",\n "city": "Gwenborough",\n "zipcode": "
92998-3874",\n "geo": {\n "lat": "-37.3159",\n "lng": "81.149
6"\n }\n },\n "phone": "1-770-736-8031 x56442",\n "website": "hild
egard.org",\n "company": {\n "name": "Romaguera-Crona",\n "catchPhr
ase": "Multi-layered client-server neural-net",\n "bs": "harness real-time
e-markets"\n }\n },\n {\n "id": 2,\n "name": "Ervin Howell",\n "us
ername": "Antonette",\n "email": "[email protected]",\n "address": {\n
"street": "Victor Plains",\n "suite": "Suite 879",\n "city": "Wisoky
burgh",\n "zipcode": "90566-7771",\n "geo": {\n "lat": "-43.950
9",\n "lng": "-34.4618"\n }\n },\n "phone": "010-692-6593 x091
25",\n "website": "anastasia.net",\n "company": {\n "name": "Deckow-C
rist",\n "catchPhrase": "Proactive didactic contingency",\n "bs": "syn
ergize scalable supply-chains"\n }\n },\n {\n "id": 3,\n "name": "Cle
mentine Bauch",\n "username": "Samantha",\n "email":
"[email protected]",
\n "address": {\n "street": "Douglas Extension",\n "suite": "Suite
847",\n "city": "McKenziehaven",\n "zipcode": "59590-4157",\n "ge
o": {\n "lat": "-68.6102",\n "lng": "-47.0653"\n }\n },\n

応答はバイト単位で示されます。あなたは手紙を受け取りますb応答の開始時。リクエストモジュールを使用すると、使用するエンコーディングを取得し、必要に応じてエンコーディングを変更することもできます。たとえば、エンコーディングを取得するには、response.encodingを使用できます。

print(getdata.encoding)

出力

utf-8

次のようにエンコーディングを変更できます-選択したエンコーディングを使用できます。

getdata.encoding = 'ISO-8859-1'

JSON応答

次のようにresponse.json()メソッドを使用して、Httpリクエストの応答をjson形式で取得することもできます。

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.json())

出力

E:\prequests>python makeRequest.py
[{'id': 1, 'name': 'Leanne Graham', 'username': 'Bret', 'email': 'Sincere@april.
biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenbor
ough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}},
'
phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name':
'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs
': 'harness real-time e-markets'}}]

RAWレスポンス

Http URLの生の応答が必要な場合は、response.rawを利用でき、さらに追加します。 stream=True 以下に示すようにgetメソッド内-

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', stream=True)
print(getdata.raw)

出力

E:\prequests>python makeRequest.py
<urllib3.response.HTTPResponse object at 0x000000A8833D7B70>

生データからより多くのコンテンツを読み取るには、次のようにします-

print(getdata.raw.read(50))

出力

E:\prequests>python makeRequest.py
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x95\x98[o\xe38\x12\x85\xdf\xe7W\x10y\
xda\x01F\x82.\xd4m\x9f\xdc\x9dd\xba\xb7\x93\xf4\x06q\xef4\x06\x83A@K\x15\x89m'

バイナリ応答

バイナリ応答を取得するには、response.contentを利用できます。

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)

出力

E:\prequests>python makeRequest.py
b'[\n {\n "id": 1,\n "name": "Leanne Graham",\n "username": "Bret",\n
"email": "[email protected]",\n "address": {\n "street": "Kulas Light
",\n "suite": "Apt. 556",\n "city": "Gwenborough",\n "zipcode": "
92998-3874",\n "geo": {\n "lat": "-37.3159",\n "lng": "81.149
6"\n }\n },\n "phone": "1-770-736-8031 x56442",\n "website": "hild
egard.org",\n "company": {\n "name": "Romaguera-Crona",\n "catchPhr
ase": "Multi-layered client-server neural-net",\n "bs": "harness real-time
e-markets"\n }\n },\n {\n "id": 2,\n "name": "Ervin Howell",\n "us
ername": "Antonette",\n "email": "[email protected]",\n "address": {\n
"street": "Victor Plains",\n "suite": "Suite 879",\n "city": "Wisoky
burgh",\n "zipcode": "90566-7771",\n "geo": {\n "lat": "-43.950
9",\n "lng": "-34.4618"\n }\n },\n "phone": "010-692-6593 x091
25",\n "website": "anastasia.net",\n "company": {\n "name": "Deckow-C
rist",\n "catchPhrase": "Proactive didactic contingency",\n "bs": "syn
ergize scalable supply-chains"\n }\n },\n {\n "id": 3,\n "name": "Cle
mentine Bauch",\n "username": "Samantha",\n "email": "[email protected]",
\n "address": {\n "street": "Douglas Extension",\n "suite": "Suite
847",\n "city": "McKenziehaven",\n "zipcode": "59590-4157",\n "ge
o": {\n "lat": "-68.6102",\n "lng": "-47.0653"\n }\n },\n

応答はバイト単位で示されます。あなたは手紙を受け取りますb応答の開始時。バイナリ応答は、主に非テキスト要求に使用されます。

リクエスト-HTTPリクエストヘッダー

前の章では、リクエストを作成してレスポンスを取得する方法を見てきました。この章では、URLのヘッダーセクションについてもう少し詳しく説明します。それで、私たちは以下を調べます-

  • リクエストヘッダーを理解する
  • カスタムヘッダー
  • 応答ヘッダー

リクエストヘッダーを理解する

ブラウザで任意のURLをヒットし、それを調べて、開発者ツールのネットワークタブをチェックインします。

応答ヘッダー、要求ヘッダー、ペイロードなどを取得します。

たとえば、次のURLを考えてみましょう-

https://jsonplaceholder.typicode.com/users

ヘッダーの詳細は次のように取得できます-

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', stream=True)
print(getdata.headers)

出力

E:\prequests>python makeRequest.py
{'Date': 'Sat, 30 Nov 2019 05:15:00 GMT', 'Content-Type': 'application/json; cha
rset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Set-Co
okie': '__cfduid=d2b84ccf43c40e18b95122b0b49f5cf091575090900; expires=Mon, 30-De
c-19 05:15:00 GMT; path=/; domain=.typicode.com; HttpOnly', 'X-Powered-By': 'Exp
ress', 'Vary': 'Origin, Accept-Encoding', 'Access-Control-Allow-Credentials': 't
rue', 'Cache-Control': 'max-age=14400', 'Pragma': 'no-cache', 'Expires': '-1', '
X-Content-Type-Options': 'nosniff', 'Etag': 'W/"160d-1eMSsxeJRfnVLRBmYJSbCiJZ1qQ
"', 'Content-Encoding': 'gzip', 'Via': '1.1 vegur', 'CF-Cache-Status': 'HIT', 'A
ge': '2271', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudf
lare.com/cdn-cgi/beacon/expect-ct"', 'Server': 'cloudflare', 'CF-RAY': '53da574f
f99fc331-SIN'}

httpヘッダーを読み取るには、次のようにします。

getdata.headers["Content-Encoding"] // gzip

カスタムヘッダー

以下に示すように、呼び出されているURLにヘッダーを送信することもできます。

import requests
headers = {'x-user': 'test123'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users', headers=headers)

渡されるヘッダーは、文字列、バイト文字列、またはUnicode形式である必要があります。渡されたカスタムヘッダーに従って、リクエストの動作は変更されません。

応答ヘッダー

ブラウザ開発者ツールのネットワークタブでURLを確認すると、応答ヘッダーは次のようになります。

リクエストモジュールからヘッダーの詳細を取得するには、を使用します。Response.headersは以下のとおりです-

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.headers)

出力

E:\prequests>python makeRequest.py
{'Date': 'Sat, 30 Nov 2019 06:08:10 GMT', 'Content-Type': 'application/json; cha
rset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Set-Co
okie': '__cfduid=de1158f1a5116f3754c2c353055694e0d1575094090; expires=Mon, 30-De
c-19 06:08:10 GMT; path=/; domain=.typicode.com; HttpOnly', 'X-Powered-By': 'Exp
ress', 'Vary': 'Origin, Accept-Encoding', 'Access-Control-Allow-Credentials': 't
rue', 'Cache-Control': 'max-age=14400', 'Pragma': 'no-cache', 'Expires': '-1', '
X-Content-Type-Options': 'nosniff', 'Etag': 'W/"160d-1eMSsxeJRfnVLRBmYJSbCiJZ1qQ
"', 'Content-Encoding': 'gzip', 'Via': '1.1 vegur', 'CF-Cache-Status': 'HIT', 'A
ge': '5461', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudf
lare.com/cdn-cgi/beacon/expect-ct"', 'Server': 'cloudflare', 'CF-RAY': '53daa52f
3b7ec395-SIN'}

次のように、必要な特定のヘッダーを取得できます-

print(getdata.headers["Expect-CT"])

出力

max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/exp
ect-ct

You can also get the header details by using the get() method.

print(getdata.headers.get("Expect-CT"))

出力

max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/exp
ect-ct

リクエスト-GETリクエストの処理

この章では、最も一般的で非常に頻繁に使用されるGETリクエストに焦点を当てます。リクエストモジュールでのGETの操作は非常に簡単です。これは、GETメソッドを使用してURLを操作する簡単な例です。

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
getdata.content, will print all the data available in the response.

出力

E:\prequests>python makeRequest.py
b'[\n {\n "id": 1,\n "name": "Leanne Graham",\n "username": "Bret",\n
"email": "[email protected]",\n "address": {\n "street": "Kulas Light
",\n "suite": "Apt. 556",\n "city": "Gwenborough",\n "zipcode": "
92998-3874",\n "geo": {\n "lat": "-37.3159",\n "lng": "81.149
6"\n }\n },\n "phone": "1-770-736-8031 x56442",\n "website": "hild
egard.org",\n "company": {\n "name": "Romaguera-Crona",\n "catchPhr
ase": "Multi-layered client-server neural-net",\n "bs": "harness real-time
e-markets"\n }\n }

以下に示すように、param属性を使用してgetメソッドにパラメーターを渡すこともできます-

import requests
payload = {'id': 9, 'username': 'Delphine'}
getdata = requests.get('https://jsonplaceholder.typicode.com/users',
params=payload)
print(getdata.content)

詳細は、キーと値のペアのオブジェクトペイロードに格納され、get()メソッド内のparamsに渡されます。

出力

E:\prequests>python makeRequest.py
b'[\n {\n "id": 9,\n "name": "Glenna Reichert",\n "username": "Delphin
e",\n "email": "[email protected]",\n "address": {\n "street":
"Dayna Park",\n "suite": "Suite 449",\n "city": "Bartholomebury",\n
"zipcode": "76495-3109",\n "geo": {\n "lat": "24.6463",\n
"lng": "-168.8889"\n }\n },\n "phone": "(775)976-6794 x41206",\n "
website": "conrad.com",\n "company": {\n "name": "Yost and Sons",\n
"catchPhrase": "Switchable contextually-based project",\n "bs": "aggregate
real-time technologies"\n }\n }\n]'

POST、PUT、PATCH、およびDELETEリクエストの処理

この章では、リクエストライブラリを使用してPOSTメソッドを使用する方法と、URLにパラメータを渡す方法について説明します。

POSTの使用

PUTリクエストの場合、Requestsライブラリにはrequests.post()メソッドがあります。その例を以下に示します。

インポートリクエスト

myurl = 'https://postman-echo.com/post'
myparams = {'name': 'ABC', 'email':'[email protected]'}
res = requests.post(myurl, data=myparams)
print(res.text)

出力

E:\prequests>python makeRequest.py
{"args":{},"data":"","files":{},"form":{"name":"ABC","email":"[email protected]"},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"30","accept":"*/*","accept-encoding":"gzip,deflate","content-type":"application/x-www-form-urlencoded","user-agent":"python-requests/2.22.0","x-forwarded-port":"443"},"json":{"name":"ABC","email":"[email protected]"},"url":"https://postman-echo.com/post"}

上記の例では、フォームデータをキーと値のペアとしてrequests.post()内のデータパラメータに渡すことができます。また、requestsモジュールでPUT、PATCH、およびDELETEを操作する方法についても説明します。

PUTの使用

PUTリクエストの場合、Requestsライブラリにはrequests.put()メソッドがあります。その例を以下に示します。

import requests
myurl = 'https://postman-echo.com/put'
myparams = {'name': 'ABC', 'email':'[email protected]'}
res = requests.put(myurl, data=myparams)
print(res.text)

出力

E:\prequests>python makeRequest.py
{"args":{},"data":"","files":{},"form":{"name":"ABC","email":"[email protected]"},"h
eaders":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":
"30","accept":"*/*","accept-encoding":"gzip, deflate","content-type":"applicatio
n/x-www-form-urlencoded","user-agent":"python-requests/2.22.0","x-forwarded-port
":"443"},"json":{"name":"ABC","email":"[email protected]"},"url":"https://postman-ec ho.com/put"}

PATCHの使用

PATCHリクエストの場合、Requestsライブラリにはrequests.patch()メソッドがあります。その例を以下に示します。

import requests
myurl = https://postman-echo.com/patch'
res = requests.patch(myurl, data="testing patch")
print(res.text)

出力

E:\prequests>python makeRequest.py
{"args":{},"data":{},"files":{},"form":{},"headers":{"x-forwarded-proto":"https"
,"host":"postman-echo.com","content-length":"13","accept":"*/*","accept-encoding
":"gzip, deflate","user-agent":"python-requests/2.22.0","x-forwarded-port":"443"
},"json":null,"url":"https://postman-echo.com/patch"}

DELETEの使用

DELETEリクエストの場合、Requestsライブラリにはrequests.delete()メソッドがあります。その例を以下に示します。

import requests
myurl = 'https://postman-echo.com/delete'
res = requests.delete(myurl, data="testing delete")
print(res.text)

出力

E:\prequests>python makeRequest.py
{"args":{},"data":{},"files":{},"form":{},"headers":{"x-forwarded-proto":"https"
,"host":"postman-echo.com","content-length":"14","accept":"*/*","accept-encoding
":"gzip, deflate","user-agent":"python-requests/2.22.0","x-forwarded-port":"443"
},"json":null,"url":"https://postman-echo.com/delete"}

リクエスト-ファイルのアップロード

この章では、リクエストを使用してファイルをアップロードし、アップロードされたファイルの内容を読み取ります。私たちはそれを使用してそれを行うことができますfiles 以下の例に示すようにparam。

を使用します http://httpbin.org/ファイルをアップロードするために投稿します。

import requests
myurl = 'https://httpbin.org/post'
files = {'file': open('test.txt', 'rb')}
getdata = requests.post(myurl, files=files)
print(getdata.text)

Test.txt

File upload test using Requests

var total = [0, 1, 2, 3].reduceRight(function(a, b){ return a + b; }); 
console.log("total is : " + total );

出力

E:\prequests>python makeRequest.py
{
  "args": {},
  "data": "",
  "files": {
   "file": "File upload test using Requests"
  },
  "form": {},
  "headers": {
   "Accept": "*/*",
   "Accept-Encoding": "gzip, deflate",
   "Content-Length": "175",
   "Content-Type": "multipart/form-data; 
boundary=28aee3a9d15a3571fb80d4d2a94bf
d33",
   "Host": "httpbin.org",
   "User-Agent": "python-requests/2.22.0"
  },
  "json": null,
  "origin": "117.223.63.135, 117.223.63.135",
  "url": "https://httpbin.org/post"
}

以下のようにファイルの内容を送信することも可能です-

import requests
myurl = 'https://httpbin.org/post'
files = {'file': ('test1.txt', 'Welcome to TutorialsPoint')}
getdata = requests.post(myurl, files=files)
print(getdata.text)

出力

E:\prequests>python makeRequest.py
{
  "args": {},
  "data": "",
  "files": {
   "file": "Welcome to TutorialsPoint"
},
"form": {},
"headers": {
   "Accept": "*/*",
   "Accept-Encoding": "gzip, deflate",
   "Content-Length": "170",
   "Content-Type": "multipart/form-data; boundary=f2837238286fe40e32080aa7e172b
e4f",
  "Host": "httpbin.org",
  "User-Agent": "python-requests/2.22.0"
},
  "json": null,
  "origin": "117.223.63.135, 117.223.63.135",
  "url": "https://httpbin.org/post"
}

リクエスト-Cookieの操作

この章では、Cookieの処理方法について説明します。リクエストライブラリを使用してURLを呼び出しながら、Cookieを取得したり送信したりできます。

URL、 https://jsonplaceholder.typicode.com/users ブラウザでヒットすると、以下に示すようにCookieの詳細を取得できます-

以下に示すようにCookieを読み取ることができます-

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.cookies["__cfduid"])

出力

E:\prequests>python makeRequest.py
d1733467caa1e3431fb7f768fa79ed3741575094848

リクエスト時にCookieを送信することもできます。

import requests
cookies = dict(test='test123')
getdata = requests.get('https://httpbin.org/cookies',cookies=cookies)
print(getdata.text)

出力

E:\prequests>python makeRequest.py
{
   "cookies": {
   "test": "test123"
}
}

リクエスト-エラーの処理

この章では、Httpリクエストライブラリを操作するときに発生するエラーに対処する方法について説明します。考えられるすべてのケースでエラーを管理することは常に良い習慣です。

エラー例外

リクエストモジュールは、次のタイプのエラー例外を出します-

ConnectionError−接続エラーがある場合、これが発生します。たとえば、ネットワークに障害が発生し、DNSエラーが発生したため、リクエストライブラリでConnectionError例外が発生します。

Response.raise_for_status()−ステータスコード(401、404)に基づいて、要求されたURLに対してHTTPErrorが発生します。

HTTPError−このエラーは、行われた要求に対して無効な応答が発生した場合に発生します。

Timeout−要求されたURLのタイムアウトに対して発生したエラー。

TooManyRedirects−最大リダイレクトの制限を超えると、TooManyRedirectsエラーが発生します。

タイムアウトに対して表示されるエラーの例を次に示します-

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)
print(getdata.text)

出力

raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='jsonplaceholder.ty
picode.com', port=443): Max retries exceeded with url: /users (Caused by Connect
TimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at
0x000000B02AD
E76A0>, 'Connection to jsonplaceholder.typicode.com timed out. (connect timeout= 0.001)'))

リクエスト-タイムアウトの処理

タイムアウトは、要求しているURLに簡単に追加できます。たまたま、サードパーティのURLを使用していて、応答を待っています。URLが応答またはエラーでタイムスパン内に応答するようにしたい場合があるため、URLにタイムアウトを与えることは常に良い習慣です。そうしないと、その要求を無期限に待機する可能性があります。

以下の例に示すように、timeout paramを使用してURLにタイムアウトを与えることができ、値は秒単位で渡されます-

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)
print(getdata.text)

出力

raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='jsonplaceholder.ty
picode.com', port=443): Max retries exceeded with url: /users (Caused by Connect
TimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0x000000B02AD
E76A0>, 'Connection to jsonplaceholder.typicode.com timed out. (connect timeout=
0.001)'))

与えられたタイムアウトは次のとおりです-

getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=0.001)

実行すると、出力に示されているように接続タイムアウトエラーがスローされます。指定されたタイムアウトは0.001です。これは、要求が応答を取得してエラーをスローすることはできません。ここで、タイムアウトを増やして確認します。

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users',timeout=1.000)
print(getdata.text)

出力

E:\prequests>python makeRequest.py
[
 {
   "id": 1,
   "name": "Leanne Graham",
   "username": "Bret",
   "email": "[email protected]",
   "address": {
   "street": "Kulas Light",
   "suite": "Apt. 556",
   "city": "Gwenborough",
   "zipcode": "92998-3874",
   "geo": {
   "lat": "-37.3159",
   "lng": "81.1496"
   }
  },
   "phone": "1-770-736-8031 x56442",
   "website": "hildegard.org",
   "company": {
   "name": "Romaguera-Crona",
   "catchPhrase": "Multi-layered client-server neural-net",
   "bs": "harness real-time e-markets"
 }

1秒のタイムアウトで、要求されたURLに対する応答を取得できます。

リクエスト-リダイレクトの処理

この章では、リクエストライブラリがURLリダイレクトのケースをどのように処理するかを見ていきます。

import requests
getdata = requests.get('http://google.com/')
print(getdata.status_code)
print(getdata.history)

URL- http://google.com ステータスコード301(恒久的に移動)を使用してリダイレクトされます https://www.google.com/。リダイレクトは履歴に保存されます。

出力

上記のコードを実行すると、次の結果が得られます。

E:\prequests>python makeRequest.py
200
[<Response [301]>]

を使用してURLのリダイレクトを停止できます allow_redirects=False。これは、使用されるGET、POST、OPTIONS、PUT、DELETE、PATCHメソッドで実行できます。

これは同じ例です。

import requests
getdata = requests.get('http://google.com/', allow_redirects=False)
print(getdata.status_code)
print(getdata.history)
print(getdata.text)

ここで、出力を確認すると、リダイレクトは許可されず、ステータスコード301が取得されます。

出力

E:\prequests>python makeRequest.py
301
[]
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

リクエスト-処理履歴

を使用して、特定のURLの履歴を取得できます response.history。指定されたURLにリダイレクトがある場合、同じものが履歴に保存されます。

歴史のために

import requests
getdata = requests.get('http://google.com/')
print(getdata.status_code)
print(getdata.history)

出力

E:\prequests>python makeRequest.py
200
[<Response [301]>]

ザ・ response.historyプロパティには、リクエストに基づいて実行されたレスポンスオブジェクトの詳細が含まれます。存在する値は、古いものから新しいものへとソートされます。ザ・response.history プロパティは、要求されたURLで実行されたすべてのリダイレクトを追跡します。

リクエスト-セッションの処理

リクエスト間でデータを維持するには、セッションが必要です。したがって、同じホストが何度も呼び出された場合は、TCP接続を再利用できます。これにより、パフォーマンスが向上します。ここで、セッションを使用して行われたリクエスト間でCookieを維持する方法を見てみましょう。

セッションを使用してCookieを追加する

import requests
req = requests.Session()
cookies = dict(test='test123')
getdata = req.get('https://httpbin.org/cookies',cookies=cookies)
print(getdata.text)

出力

E:\prequests>python makeRequest.py
{
   "cookies": {
   "test": "test123"
}
}

セッションを使用すると、リクエスト間でCookieデータを保持できます。以下に示すように、セッションを使用してヘッダーデータを渡すこともできます-

import requests
req = requests.Session()
req.headers.update({'x-user1': 'ABC'})
headers = {'x-user2': 'XYZ'}
getdata = req.get('https://httpbin.org/headers', headers=headers)    
print(getdata.headers)

リクエスト-SSL認証

SSL証明書は、安全なURLに付属するセキュリティ機能です。Requestsライブラリを使用すると、指定されたhttpsURLのSSL証明書も検証されます。SSL検証は、requestsモジュールでデフォルトで有効になっており、証明書が存在しない場合はエラーをスローします。

安全なURLでの作業

以下は、安全なURLを使用する例です-

import requests
getdata = requests.get(https://jsonplaceholder.typicode.com/users)
print(getdata.text)

出力

E:\prequests>python makeRequest.py
[
   {
   "id": 1,
   "name": "Leanne Graham",
   "username": "Bret",
   "email": "[email protected]",
   "address": {
   "street": "Kulas Light",
   "suite": "Apt. 556",
   "city": "Gwenborough",
   "zipcode": "92998-3874",
   "geo": {
   "lat": "-37.3159",
   "lng": "81.1496"
   }
  },
   "phone": "1-770-736-8031 x56442",
   "website": "hildegard.org",
   "company": {
   "name": "Romaguera-Crona",
   "catchPhrase": "Multi-layered client-server neural-net",
   "bs": "harness real-time e-markets"
   }
  }
]

上記のhttpsURLから簡単に応答がありますが、これはリクエストモジュールがSSL証明書を検証できるためです。

以下の例に示すように、verify = Falseを追加するだけで、SSL検証を無効にできます。

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', verify=False)
print(getdata.text)

出力が表示されますが、SSL証明書が検証されていないため、証明書の検証を追加することをお勧めするという警告メッセージも表示されます。

出力

E:\prequests>python makeRequest.py
connectionpool.py:851: InsecureRequestWarning: Unverified HTTPS request is being
made. Adding certificate verification is strongly advised. See: https://urllib3
   .readthedocs.io/en/latest/advanced-usage.htm  l#ssl-warnings
 InsecureRequestWarning)
[
 {
  "id": 1,
   "name": "Leanne Graham",
   "username": "Bret", 
   "email": "[email protected]",
   "address": {
   "street": "Kulas Light",
   "suite": "Apt. 556",
   "city": "Gwenborough",
   "zipcode": "92998-3874",
   "geo": {
   "lat": "-37.3159",
   "lng": "81.1496"
   }
  },
   "phone": "1-770-736-8031 x56442",
   "website": "hildegard.org",
   "company": {
   "name": "Romaguera-Crona",
   "catchPhrase": "Multi-layered   client-server neural-net",
   "bs": "harness real-time e-markets"
  }
 }
]

最後にSSL証明書をホストし、を使用してパスを指定することで、SSL証明書を確認することもできます。 verify 以下に示すパラメータ。

import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', verify='C:\Users\AppData\Local\certificate.txt')
print(getdata.text)

出力

E:\prequests>python makeRequest.py
[
  {
   "id": 1,
   "name": "Leanne Graham",
   "username": "Bret",
   "email": "[email protected]",
   "address": {
   "street": "Kulas Light",
   "suite": "Apt. 556",
   "city": "Gwenborough",
   "zipcode": "92998-3874",
   "geo": {
   "lat": "-37.3159",
   "lng": "81.1496"
   }
  },
   "phone": "1-770-736-8031 x56442",
   "website": "hildegard.org",
   "company": {
   "name": "Romaguera-Crona",
   "catchPhrase": "Multi-layered   client-server neural-net",
   "bs": "harness real-time e-markets"
   }
  }
]

リクエスト-認証

この章では、Requestsモジュールで使用できる認証の種類について説明します。

以下について説明します-

  • HTTPリクエストでの認証の動作

  • 基本認証

  • ダイジェスト認証

  • OAuth2認証

HTTPリクエストでの認証の動作

HTTP認証はサーバー側で行われ、クライアントがURLを要求すると、ユーザー名、パスワードなどの認証情報を要求します。これは、クライアントとサーバー間で交換される要求と応答の追加のセキュリティです。

クライアント側から、これらの追加の認証情報、つまりユーザー名とパスワードをヘッダーで送信できます。ヘッダーは後でサーバー側で検証されます。応答は、認証が有効な場合にのみサーバー側から配信されます。

Requestsライブラリは、requests.authで最も一般的に使用される認証であり、基本認証(HTTPBasicAuth)とダイジェスト認証(HTTPDigestAuth)です。

基本認証

これは、サーバーに認証を提供する最も簡単な形式です。基本認証を使用するには、requestsライブラリで使用可能なHTTPBasicAuthクラスを使用します。

これは、その使用方法の実例です。

import requests
from requests.auth import HTTPBasicAuth
response_data = requests.get('httpbin.org/basic-auth/admin/admin123', auth=HTTPDigestAuth('admin', 'admin123'))
print(response_data.text)

私たちはURLを呼んでいます、 https://httpbin.org/basic-auth/admin/admin123ユーザーをadmin、パスワードをadmin123とします。

したがって、このURLは、ユーザーとパスワードなどの認証なしでは機能しません。auth paramを使用して認証を行うと、サーバーのみが応答を返します。

出力

E:\prequests>python makeRequest.py
{
   "authenticated": true,
   "user": "admin"
}

ダイジェスト認証

これは、リクエストで使用できる別の形式の認証です。リクエストからHTTPDigestAuthクラスを利用します。

import requests
from requests.auth import HTTPDigestAuth
response_data = requests.get('https://httpbin.org/digest-auth/auth/admin/admin123>, auth=HTTPDigestAuth('admin', 'admin123'))
print(response_data.text)

出力

E:\prequests>python makeRequest.py
{
   "authenticated": true,
   "user": "admin"
}

OAuth2認証

OAuth2認証を使用するには、「requests_oauth2」ライブラリが必要です。「requests_oauth2」をインストールするには、次のようにします-

pip install requests_oauth2

インストール中の端末の表示は以下のようになります-

E:\prequests>pip install requests_oauth2
Collecting requests_oauth2
Downloading https://files.pythonhosted.org/packages/52/dc/01c3c75e6e7341a2c7a9
71d111d7105df230ddb74b5d4e10a3dabb61750c/requests-oauth2-0.3.0.tar.gz
Requirement already satisfied: requests in c:\users\xyz\appdata\local\programs
\python\python37\lib\site-packages (from requests_oauth2) (2.22.0)
Requirement already satisfied: six in c:\users\xyz\appdata\local\programs\pyth
on\python37\lib\site-packages (from requests_oauth2) (1.12.0)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\use
rs\xyz\appdata\local\programs\python\python37\lib\site-packages (from requests
->requests_oauth2) (1.25.3)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\xyz\appdata\loca
l\programs\python\python37\lib\site-packages (from requests->requests_oauth2) (2
019.3.9)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\xyz\appdata\l
ocal\programs\python\python37\lib\site-packages (from requests->requests_oauth2)
(3.0.4)
Requirement already satisfied: idna<2.9,>=2.5 in c:\users\xyz\appdata\local\pr
ograms\python\python37\lib\site-packages (from requests->requests_oauth2) (2.8)
Building wheels for collected packages: requests-oauth2
Building wheel for requests-oauth2 (setup.py) ... done
Stored in directory: C:\Users\xyz\AppData\Local\pip\Cache\wheels\90\ef\b4\43
3743cbbc488463491da7df510d41c4e5aa28213caeedd586
Successfully built requests-oauth2

「requests-oauth2」のインストールが完了しました。Google、TwitterのAPIを使用するには、その同意が必要です。同じことがOAuth2認証を使用して行われます。

OAuth2認証には、クライアントIDと秘密鍵が必要です。入手方法の詳細は、https://developers.google.com/identity/protocols/OAuth2。

後で、で利用可能なGoogleAPIコンソールにログインします。 https://console.developers.google.com/クライアントIDと秘密鍵を取得します。

「requests-oauth2」の使用例を次に示します。

import requests
from requests_oauth2.services import GoogleClient
google_auth = GoogleClient(
   client_id="xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
redirect_uri="http://localhost/auth/success.html",
)
a = google_auth.authorize_url(
   scope=["profile", "email"],
   response_type="code",
)
res = requests.get(a)
print(res.url)

Gmailアカウントにログインする必要があるため、指定されたURLにリダイレクトすることはできませんが、ここでは、例からgoogle_authが機能し、許可されたURLが指定されていることがわかります。

出力

E:\prequests>python oauthRequest.py
https://accounts.google.com/o/oauth2/auth?redirect_uri=
http%3A%2F%2Flocalhost%2Fauth%2Fsuccess.html&
client_id=xxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com&
scope=profile+email&response_type=code

リクエスト-イベントフック

イベントフックを使用して、要求されたURLにイベントを追加できます。以下の例では、応答が利用可能になったときに呼び出されるコールバック関数を追加します。

コールバックを追加するには、以下の例に示すように、フックパラメータを使用する必要があります-

mport requests
def printData(r, *args, **kwargs):
   print(r.url)
   print(r.text)
getdata = requests.get('https://jsonplaceholder.typicode.com/users', 
hooks={'response': printData})

出力

E:\prequests>python makeRequest.py
https://jsonplaceholder.typicode.com/users
[
{
   "id": 1,
   "name": "Leanne Graham",
   "username": "Bret",
   "email": "[email protected]",
   "address": {
   "street": "Kulas Light",
   "suite": "Apt. 556",
   "city": "Gwenborough",
   "zipcode": "92998-3874",
   "geo": {
    "lat": "-37.3159",
    "lng": "81.1496"
   }
  }, 
   "phone": "1-770-736-8031 x56442",
   "website": "hildegard.org",
   "company": {
   "name": "Romaguera-Crona",
   "catchPhrase": "Multi-layered client-server neural-net",
   "bs": "harness real-time e-markets"
   }
  }
]

以下に示すように、複数のコールバック関数を呼び出すこともできます-

import requests
def printRequestedUrl(r, *args, **kwargs):
   print(r.url)
def printData(r, *args, **kwargs):
   print(r.text)
getdata = requests.get('https://jsonplaceholder.typicode.com/users', hooks={'response': [printRequestedUrl, printData]})

出力

E:\prequests>python makeRequest.py
https://jsonplaceholder.typicode.com/users
[
  {
   "id": 1,
   "name": "Leanne Graham",
   "username": "Bret",
   "email": "[email protected]",
   "address": {
   "street": "Kulas Light",
   "suite": "Apt. 556",
   "city": "Gwenborough",
   "zipcode": "92998-3874",
   "geo": {
   "lat": "-37.3159",
   "lng": "81.1496"
 }
  },
   "phone": "1-770-736-8031 x56442",
   "website": "hildegard.org",
   "company": {
   "name": "Romaguera-Crona",
   "catchPhrase": "Multi-layered client-server neural-net",
    "bs": "harness real-time e-markets"
   }
  }
]

以下に示すように、作成されたセッションにフックを追加することもできます-

import requests
def printData(r, *args, **kwargs):
print(r.text)
s = requests.Session()
s.hooks['response'].append(printData)
s.get('https://jsonplaceholder.typicode.com/users')

出力

E:\prequests>python makeRequest.py
[
 {
   "id": 1,
   "name": "Leanne Graham",
   "username": "Bret",
   "email": "[email protected]",
   "address": {
   "street": "Kulas Light",
   "suite": "Apt. 556",
   "city": "Gwenborough",
   "zipcode": "92998-3874",
   "geo": {
   "lat": "-37.3159",
   "lng": "81.1496"
   }
  },
   "phone": "1-770-736-8031 x56442",
   "website": "hildegard.org",
   "company": {
   "name": "Romaguera-Crona",
   "catchPhrase": "Multi-layered client-server neural-net",
   "bs": "harness real-time e-markets"
   }
  }
]

リクエスト-プロキシ

これまで、クライアントがサーバーに直接接続して通信するのを見てきました。プロキシを使用すると、相互作用は次のように発生します-

  • クライアントはプロキシにリクエストを送信します。

  • プロキシはリクエストをサーバーに送信します。

  • サーバーは応答をプロキシに送り返します。

  • プロキシはクライアントに応答を送り返します。

Http-proxyの使用は、クライアントとサーバー間のデータ交換を管理するために割り当てられた追加のセキュリティです。リクエストライブラリには、以下に示すようにプロキシパラメータを使用してプロキシを処理するためのプロビジョニングもあります-

import requests
proxies = {
'http': 'http://localhost:8080'
}
res = requests.get('http://httpbin.org/', proxies=proxies)
print(res.status_code)

リクエストは( 'http://localhost:8080 URL。

出力

200

リクエスト-リクエストを使用したWebスクレイピング

Pythonリクエストライブラリを使用して、特定のURLからデータを取得する方法についてはすでに説明しました。のサイトからデータをスクラップしようとしますTutorialspoint これはで利用可能です https://www.tutorialspoint.com/tutorialslibrary.htm 以下を使用して-

  • リクエストライブラリ

  • Pythonの美しいスープライブラリ

Requestsライブラリはすでにインストールされているので、Beautifulsoupパッケージをインストールしましょう。こちらが公式サイトですbeautiful soup で利用可能 https://www.crummy.com/software/BeautifulSoup/bs4/doc/ あなたが美しいスープのいくつかのより多くの機能を探求したい場合に備えて。

Beautifulsoupのインストール

以下にBeautifulSoupのインストール方法を見ていきます-

E:\prequests>pip install beautifulsoup4
Collecting beautifulsoup4
Downloading https://files.pythonhosted.org/packages/3b/c8/a55eb6ea11cd7e5ac4ba
cdf92bac4693b90d3ba79268be16527555e186f0/beautifulsoup4-4.8.1-py3-none-any.whl (
101kB)
|████████████████████████████████| 102kB 22kB/s
Collecting soupsieve>=1.2 (from beautifulsoup4)
Downloading https://files.pythonhosted.org/packages/81/94/03c0f04471fc245d08d0
a99f7946ac228ca98da4fa75796c507f61e688c2/soupsieve-1.9.5-py2.py3-none-any.whl
Installing collected packages: soupsieve, beautifulsoup4
Successfully installed beautifulsoup4-4.8.1 soupsieve-1.9.5

これで、Pythonリクエストライブラリと美しいスープがインストールされました。

与えられたURLからデータを廃棄するコードを書いてみましょう。

ウェブスクレイピング

import requests
from bs4 import BeautifulSoup
res = requests.get('https://www.tutorialspoint.com/tutorialslibrary.htm')
print("The status code is ", res.status_code)
print("\n")
soup_data = BeautifulSoup(res.text, 'html.parser')
print(soup_data.title)
print("\n")
print(soup_data.find_all('h4'))

リクエストライブラリを使用すると、指定されたURLからコンテンツをフェッチできます。美しいスープライブラリは、コンテンツを解析して、必要な方法で詳細をフェッチするのに役立ちます。

美しいスープライブラリを使用して、Htmlタグ、クラス、ID、cssセレクターなどの多くの方法を使用してデータをフェッチできます。以下は、ページのタイトルとページ上のすべてのh4タグを印刷した出力です。

出力

E:\prequests>python makeRequest.py
The status code is 200
<title>Free Online Tutorials and Courses</title>
[<h4>Academic</h4>, <h4>Computer Science</h4>, <h4>Digital Marketing</h4>, <h4>M
onuments</h4>,<h4>Machine Learning</h4>, <h4>Mathematics</h4>, <h4>Mobile Devel
opment</h4>,<h4>SAP</h4>, <h4>Software Quality</h4>, <h4>Big Data & Analyti
cs</h4>, <h4>Databases</h4>, <h4>Engineering Tutorials</h4>, <h4>Mainframe Devel
opment</h4>, <h4>Microsoft Technologies</h4>, <h4>Java Technologies</h4>,<h4>XM
L Technologies</h4>, <h4>Python Technologies</h4>, <h4>Sports</h4>, <h4>Computer
Programming</h4>,<h4>DevOps</h4>, <h4>Latest Technologies</h4>, <h4>Telecom</h4>, <h4>Exams Syllabus</h4>, <h4>UPSC IAS Exams</h4>, <h4>Web Development</h4>,
<h4>Scripts</h4>, <h4>Management</h4>,<h4>Soft Skills</h4>, <h4>Selected Readin
g</h4>, <h4>Misc</h4>]