Python の requests ライブラリとは? HTTP とセッション

Python requestsライブラリとは何ですか?

Scrapeless Web Unlockerは、Python HTTPクライアントがAPIを通じて呼び出すことができる管理されたウェブコンテンツの取得を提供します。

Pythonのrequestsライブラリは、同期的なPythonインターフェースを介してリクエストを送信し、応答を受信するためのオープンソースのHTTPクライアントです。Requestsを使用して、ドキュメントを取得したり、APIを呼び出したり、サポートされているリクエストボディを送信したり、応答ヘッダーを検査したり、Sessionを使用してクライアントの状態を維持したりします。

Requestsは、プログラムにHTTP交換の制御を与えます。これは、宛先のページのJavaScriptを実行したり、返されたコンテンツのビジネスの意味を解釈したりしません。したがって、有用なフェッチワークフローは、トランスポートの成功、HTTPステータス、レスポンスフォーマット、およびアプリケーションが実際に必要とするフィールドを分離します。

TL;DR

  • リクエストは、ブロックインターフェースを介してHTTPトラフィックを送信します。 呼び出しコードは、リクエストが処理されるまで待機します。
  • リクエストのレスポンスは、ステータス、ヘッダー、およびコンテンツを表示します。 JSONデコードだけでは、API呼び出しが成功したことを証明するものではありません。
  • リクエストセッションはクッキーを保持し、接続を再利用します。 クライアントの状態を共有すべきワークフローにセッションをスコープします。
  • リクエストには明示的なタイムアウトポリシーが必要です。 タイムアウト値は、アプリケーションジョブ全体の締切として自動的に設定されるわけではありません。

Requestsは何をするのか?

RequestsはHTTPリクエストを構築し、Pythonコードが検査できるResponseオブジェクトを返します。 リクエスト HTTP インターフェース 一般的なリクエストメソッド、クエリパラメータ、ヘッダー、フォームデータ、JSONボディ、およびレスポンス処理をサポートしています。

リクエストには宛先URLとメソッドがあります。クエリパラメータはURLクエリに含める必要があり、サポートされているリクエストボディは構造化された入力を持つことができます。これらの選択肢は、すべてのサーバーが同じ形式を受け入れると仮定するのではなく、宛先APIに沿って整合させてください。

Requestsは交換を扱いますが、アプリケーションが契約を選択します。ジョブが製品ドキュメントを期待する場合、最終応答にそのドキュメントが含まれていることを確認してください。JSONレコードを期待する場合、応答の型とフィールドを検証します。トランスポートライブラリは、HTMLページが要求されたコンテンツ、アクセスメッセージ、または一般的なエラーページであるかどうかを推測することはできません。

要求に応じたクライアントがアプリケーションに適している場合、Requestsを使用します。このモデルにおいては、小さなスケジュールされたタスクやサービス間の呼び出しは簡単に行えるかもしれません。しかし、多くの独立したリクエストを同時に必要とするワークロードについては、実行とリソース制限に関して別の判断が必要です。

レスポンスを正しく読む方法

応答は段階的に評価されるべきです:ステータス、最終目的地、コンテンツタイプ、およびアプリケーション固有のコンテンツ。 HTTPセマンティクス標準 応答のステータスとメソッドの動作を定義し、アプリケーションのスキーマは成功するボディに含まれるべき内容を定義します。

ステータスコードは最初の手がかりです。リクエストはそれを直接表示でき、HTTPエラーステータスに対して例外を発生させることができます。 raise_for_status()そのチェックは、成功ステータスのボディに必要なフィールドが含まれていることを証明するものではありません。一部のウェブサイトは、通常の成功ステータスでアクセスページまたは空のアプリケーションシェルを返します。

コンテンツの表現を慎重に選択してください。 content 応答バイトを提供します; text デコードされたテキストを提供します。 json() 有効なJSONである場合、レスポンスボディをデコードします。サーバーは有効なJSONエラーオブジェクトを返すことができるため、成功したデコードの後には、ステータスとスキーマのチェックが必要です。

抽出したレコードについては、ソースURLと関連するリクエストコンテキストをフィールドと一緒に記録してください。リダイレクトが宛先を変更する場合は、最終的なURLも保持してください。その出所は、なぜ2回の実行で異なるコンテンツが生成されたのかを説明するのに役立ちます。

リクエストセッションが保持するもの

リクエストセッションは、クッキーと共有設定を保持し、その基盤となるコネクションプールを通じて接続の再利用をサポートします。 リクエスト セッションの動作 関連する呼び出しは、毎回リクエストをゼロから再構築することなく、同じクライアントコンテキストを使用します。

クッキーとTCP接続は異なる形態の連続性です。クッキーはアプリケーションの状態を識別できる一方で、プールされた接続は接続設定の作業を軽減します。どちらも自動的にトラフィックを1つのプロキシ出口に束縛するわけではありません。ワークフローが安定した出口IPを必要とする場合、プロキシのセッションポリシーはそれを別途提供しなければなりません。

スコープセッションは、状態を共有すべきアイデンティティとタスクに関するものです。ある地域の認可されたワークフローは、別の地域の独立したテストからクッキーを誤って再利用してはいけません。無関係なクレデンシャルやクッキーは、異なるクライアントコンテキストに保持してください。

セッションはワークフローが終了したら閉じてください。ストリーミングレスポンスの場合、接続リソースを解放できるようにレスポンスを消費または閉じてください。長期間使用するアプリケーションは意図的なリソース管理が必要です。すべてのレスポンスを開いたままにしておくと、効率を向上させるために意図されたリソースプールが枯渇する可能性があります。

リクエストのタイムアウトとはどういう意味ですか?

リクエストのタイムアウト制御は、全作業のための保証された壁時計の締切を設定するのではなく、ネットワーク操作中に待機します。リクエストは、あなたが提供しない限り、デフォルトのタイムアウトを適用しません。

接続タイムアウトは接続の確立に関するものです。読み取りタイムアウトはサーバーからのデータを待つことに関します。これらの値はネットワークの待機動作を説明します;リダイレクト、複数回の呼び出し、解析、およびストレージは、単一の待機インターバルの外で作業を追加します。

ターゲットおよびアプリケーションのニーズに適した明示的な値を設定し、リクエストがそれらの範囲内で完了できない場合にジョブが何をすべきかを定義します。バッチには独自の総作業予算とキャンセルルールも必要です。リクエストごとのタイムアウトをバッチ全体の期限と混同すると、スケジュールされたタスクが予想以上に長く実行される可能性があります。

ステージごとの障害を診断します。名前解決、接続確立、TLS検証、HTTPステータス、デコーディングは別々の問題です。ステージとサニタイズされたエラーカテゴリをキャプチャすることは、リクエストが失敗しただけをログするよりも有用です。

ヘッダー、認証、およびリダイレクト

ヘッダーはリクエストメタデータを説明し、認証は宛先またはプロキシが必要とする資格情報を供給します。APIが実際に文書化しているメカニズムを使用し、秘密情報は公開されたソースコードやルーチンログの外に保管してください。

JSONリクエストボディとフォームボディは異なるエンコーディングを持っています。Requestsでは、JSONとデータの入力は異なる目的に使用されます。間違った形式で正しいフィールドを送信すると、認証が正しくても検証エラーが発生する可能性があります。

リダイレクトは最終的な宛先を変更することがあります。特定のリソースに依存するタスクの場合、リダイレクト履歴と最終URLを検査してください。ログイン画面やホームページに移動した場合は、成功ステータスが返されてもコンテンツ不一致と見なしてください。

プロキシの資格情報を宛先の資格情報から分離してください。プロキシ認証は、ルーティングサービスを使用することができることを証明し、宛先認証はアプリケーションが要求されたリソースにアクセスできることを証明します。間違ったレイヤーに秘密を渡すと、リクエストが失敗し、資格情報が不必要に露出する可能性があります。

RequestsがプロキシとTLSを使用する方法

Requestsは、構成されたプロキシを介してHTTPおよびHTTPS宛先トラフィックをルーティングでき、デフォルトでHTTPS証明書を検証します。 TLSプロトコル はTLSが使用される場所で暗号化された輸送を供給します。プロキシルーティングだけでは、すべての接続の暗号化を作成することはありません。

宛先スキームとプロキシスキームは異なるホップを説明します。HTTPS URLは、CONNECTトンネルを使用してHTTPプロキシを介して要求できます。ターゲットのTLSセッションは、そのトンネル内のクライアントと宛先の間で保持される可能性があります。TLS対応プロキシ輸送は、クライアントとプロキシがそれをサポートする場合、クライアントからプロキシへの接続に保護を追加します。

Requestsは環境設定も考慮しているため、シェルまたはデプロイメントレベルのプロキシ設定が、単純な呼び出しに影響を与えることがあります。動作が機械間で異なる場合、実効設定を検査してください。アプリケーション固有のプロキシ値がすべての可能なルートを制御するわけではないと仮定するのではなく、除外ルールを意図的に保ってください。

SOCKSサポートには関連するオプションの依存関係が必要です。ホスト名解決の動作は選択されたスキームによって異なります:Requestsの実装は、ローカル解決とプロキシ側解決を区別します。プライバシーまたは位置の主張を行う前に、クライアントのサポートとDNSの動作を確認してください。

RequestsとScrapyおよびブラウザーの比較

Requestsは、必要なデータがHTTP応答を介して利用可能で、アプリケーションがスケジューリングと解析を所有できる場合に適しています。クローラーフレームワークとブラウザランタイムは、Requestsが単独では提供しない機能を追加します。

要件Requests単独追加のレイヤー
既知の公開URLを取得するリクエストを送信し、応答を検査できます構造化されたフィールドが必要な場合はパーサー
リンクされたページを発見するアプリケーションコードが発見を整理する必要がありますスケジューリングとスコープのためのクローラーフレームワーク
ページJavaScriptを実行するブラウザページコードを実行しませんレンダリングまたはブラウザレイヤー
ビジネスレコードを検証するビジネススキーマを知りません明示的なスキーマとコンテンツチェック

Pythonデータ収集ツールの比較 はそれらの責任を分離するのに役立ちます。異なるHTMLパーサーを選択しても、ダウンロードされたドキュメントに存在しないコンテンツは解決しません。

管理されたコンテンツ取得がフィットする場所

管理されたコンテンツ取得は、アプリケーションがHTTP向けのインターフェースを望むが、ターゲットが追加のアクセス処理やレンダリングを必要とする場合に適しています。 Scrapeless Web Unlocker はその取得サービスを提供し、あなたのPythonコードはリクエスト入力と返されたコンテンツの解釈に責任を持ちます。

その Web Unlocker取得ドキュメント は製品の役割を説明します。管理されたサービスへのリクエストには、検査するための二つの契約があります:サービス応答とそれが運ぶターゲットコンテンツです。コンテンツをパーサーに渡したり、レコードを保存したりする前に、サービスの結果を検証してください。

取得アダプターを小さく保つ。アプリケーションのビジネス変換をすべて埋め込むことなく、コンテンツと関連するコンテキストを返すようにしてください。これにより、ダウンストリームのレコードモデルを変更することなく、直接Requests取得と管理された取得を同じ許可されたサンプルで比較することが可能になります。

レビュー Scrapelessの価格 は、あなたのタスクに必要な取得の量に対して行ってください。完了したすべてのHTTP交換を仕事としてカウントするのではなく、受け入れられたコンテンツと検証されたレコードを比較の結果として使用してください。

結論

Pythonのrequestsライブラリは、アプリケーションがリクエストを直接制御する必要がある場合に実用的なHTTPクライアントです。タイムアウトを設定し、クライアントの状態を意図的に保持し、TLS検証を有効にし、応答とその内容の両方を検証します。タスクがそのレイヤーを必要とする場合にのみ、クロールまたはレンダリングを追加します。

正しいHTTP取得レイヤーを選択する

リクエスト制御にはHTTPクライアントを使用し、ターゲットが追加のアクセスやレンダリングサポートを必要とする場合にはマネージド取得を評価します。

今すぐ登録して、 $5の無料クレジットを取得 — クレジットカードは必要ありません.

あなたの$5クレジットを請求する→

FAQ

Q: RequestsはPython標準ライブラリの一部ですか?

Requestsは標準ライブラリモジュールではなく、サードパーティのPythonライブラリです。プロジェクトの依存関係管理を使用して、デプロイするバージョンをインストールし記録してください。その選択はPythonランタイムや特定のプロキシプロトコルに必要なオプションの依存関係から分けておくべきです。

Q: RequestsはJavaScriptを実行しますか?

RequestsはページのJavaScriptを実行しません。HTTPリクエストによって返されるコンテンツを受け取ります。フィールドがブラウザのレンダリング後にのみ表示される場合は、実際のデータソースを調査するか、繰り返し抽出セレクタを変更するのではなくレンダリングレイヤーを選択してください。

Q: 成功したJSONデコードはリクエストが成功したことを意味しますか?

成功したJSONデコードは、応答ボディが有効なJSONであることだけを意味します。HTTPステータス、サービス結果、期待されるフィールドを別々に確認してください。APIは有効なJSONとしてエラーオブジェクトを送信できますし、成功ステータスのオブジェクトが必要なレコードを省略することもあります。

Q: Requestsセッションは同じプロキシIPを保持しますか?

Requestsセッションは、それ自体では同じプロキシ出口IPを保証しません。クッキーを保持し、接続プーリングをサポートします。出口IPの連続性はプロキシ設定とセッションポリシーに依存し、それはクッキーを使用する論理ワークフローと一致しなければなりません。

Q: なぜ証明書の検証を有効にしておくべきですか?

HTTPSが信頼できる証明書と対照して宛先のアイデンティティを確認するため、証明書の検証は有効にしておくべきです。そのチェックを無効にすると、なりすましに対する保護が弱まります。検証に失敗した場合は、ルーチンの回避策としてチェックをオフにするのではなく、証明書の信頼とデプロイメント構成を調査してください。

参考文献