1つの要求モジュール

公式文書には、本当に使いやすいです

公式文書:https://2.python-requests.org//zh_CN/latest/index.html

参考ブログ:https://www.cnblogs.com/humiao-0626/category/1465538.html

1.クイックスタート

# - * -コーディング:UTF-8 - * - 
"" "
要求模块
https://2.python-requests.org//zh_CN/latest/index.html
"""

インポート要求#

送信要求

R = requests.get( "https://www.cnblogs.com/")#1 R:応答对象
プリント(R)

#R = requests.post( "http://httpbin.org/post"、データ= { 'キー': '値'})
#R = requests.put( "http://httpbin.org/put"、データ= { 'キー': '値'})
#R = requests.delete(「HTTP: //httpbin.org/delete ")
#R = requests.head(" http://httpbin.org/get ")
#R = requests.options(" http://httpbin.org/get」)

URLパラメータは、2を通過しました

#ペイロード= { "キー1": "値1"、 "KEY2": "値2"} 
ペイロード= { "キー1": "値1"、 "KEY2": "値2"、 "値3"]}

R = requests.get (「http://httpbin.org/get",params=payload)

#print(r.url)#http://httpbin.org/get?key1=value1&key2=value2
プリント(r.url)#のhttp:/ /httpbin.org/get?key1=value1&key2=value2&key2=value3

3応答内容

requests.get = R&LT( "https://api.github.com/events")
プリント(r.text)


レスポンス符号化タイプ
プリント(r.encoding)#8 UTF-

プリント(r.content)#1 B「[ {「上記ID」:「10124980852」、「タイプの」:「PushEvent」、「俳優」:{「上記IDに言及」:387
#、例えばHTTP及びXML自体とエンコーディングを指定することができます。
#この場合、あなたは、コーディングを見つけるためにr.contentを使用する必要があります
#のr.encodingを、対応するコードを設定します。この
#は、コード解像度r.textアップの正しい種類を使用することができます。

4バイナリ応答内容

印刷(r.content)の##のB「[{ "ID": "10124980852"、 "タイプ": "PushEvent"、 "俳優":{ "ID":387 
あなたは自動的に暗号化復号GZIPを送信して収縮させるための#要求応答データ。

画像を作成するために、バイナリデータの復帰を要求する#
「」「
PILインポートイメージから
IOインポートBytesIOから
I = Image.open(BytesIO(r.content))
」「」

5 JSONの応答内容

requests.get = R&LT( 'https://api.github.com/events')
r.json()#1 B」[{ "ID": "10125000497"、 "タイプ": "PushEvent"、 "俳優"。 { "上記ID":28391787、 "ログイン": "m1ha5"、 "display_login": "M1"}}]

応答の#内容は(不正)401は、とValueErrorをスローしr.jsonを()にアクセスしようとしている:いいえJSONオブジェクト例外をデコードすることができます。
#リクエストが成功したかどうかを確認するには、r.raise_for_statusを(使用)またはr.status_codeかどうかをチェックし、あなたは同じ期待してください
(r.raise_for_status())#印刷の
印刷(r.status_code)

元のコンテンツに応じて、6

    #サーバソケットから元の応答取得する
ストリーム= Trueの初期要求に設定されていることを確認#を
R&LT requests.get =(「https://api.github.com/events」、ストリーム= TRUE)
プリント(R&LT。 RAW)#<0x000001D3FD5525C0 ATオブジェクトurllib3.response.HTTPResponse>

印刷(r.raw.read(10))のB# '\ X1F \ x8b \ X08 \ xOO \ xOO \ xOO \ xOO \ xOO \ xOO \ X03'
ファイルに保存され、次のテキストストリームモード
:オープンで( 'test.txtの'、 'WB')FD AS
チャンクのr.iter_content中(CHUNK_SIZE = 10):
fd.write(チャンク)

7つのカスタムリクエストヘッダ

= URL "https://api.github.com/some/endpoint" 
ヘッダー= { 'ユーザエージェント': 'マイアプリ/ 0.0.1'}
R&LT requests.get =(URL、ヘッダー=ヘッダ)
#カスタム特定の情報源よりも低い優先順位ヘッダ
#注:すべての値は、ヘッダ文字列、バイト文字列またはUnicodeでなければなりません。

8つの、より複雑なPOSTリクエスト

= URL 'http://httpbin.org/post' 
ペイロード= { 'KEY1': 'vaule1'、 'KEY2': '値2'}

は、データパラメータのタプルのリストを渡します。同じキーを使用してフォームに複数の要素が、このアプローチは特に有効である場合:
ペイロード=(( 'KEY1'、 'VALUE1')、( 'KEY1'、 'VALUE1'))

R&LT requests.post =(URLのURL = 、データ=ペイロード)
プリント(r.text)#は、応答コンテンツを返し


、データが#、文字列パスの形で符号化された形式で送信されない
:JSON POST /パッチデータとして符号化を受ける位例えば、のGitHub API v3の
インポートJSON
URL = ' https://api.github.com/some/endpoint '
ペイロード= {'一部':'データ「}

自体辞書#がコードする
#R = requests.post(URL = URL 、データ=のjson.dumps(ペイロード)

パラメータによって直接伝達#1 JSON
R&LT requests.post =(URL = URL、JSON =ペイロード)

プリント(r.text)

マルチパート(マルチパート・エンコード)ファイルをコード9 POST

公式ドキュメント

10応答ステータスコード

= URL "http://httpbin.org/get" 
R = requests.get(URL = URL)
を印刷(r.status_code)
印刷(r.status_code == requests.codes.ok)は##真の要求も付属しています内蔵されたクエリオブジェクトステータスコード

#悪い要求(クライアントエラー4XX、5XXまたはサーバーエラー応答)、送信された場合
、我々は()Response.raise_for_statusので例外をスローすることができます。#
URL =「http://httpbin.orgを/ステータス/ 404」
bad_r = requests.get(URL = URL)
を印刷(bad_r.status_code)
印刷(bad_r.raise_for_status())

レスポンスヘッダー11

印刷(r.headers)#字典

''」
{
'とAccess-Control-Allow-Credentials': '真'、
'アクセス制御-許可-起源': '*'、
'コンテンツエンコード': 'gzipの'
'Content-Typeの': 'アプリケーション/ JSON'、
'日': '木、2019年8月1日2時59分19秒GMT'、
'リファラー-ポリシー': 'ノーリファラー-時にダウングレード'、
'サーバ': 'nginxの'、
'X-Content-Typeの-オプション': 'nosniff'、
'X-フレーム・オプション': 'DENY'、
'X-XSS-保護':「1; モード=ブロック」、
'のContent-Length': '184'、







#サーバーは、異なる値と、毎回同じヘッダを複数回受け入れることができます

12クッキー

#応答はクッキーの一部が含まれている、あなたはすぐに彼らにアクセスできる
URLを= 'http://example.com/some/cookie/setting/url'
R = requests.get(URL = URL)
を印刷(r.cookies)# <RequestsCookieJar []>
印刷(r.cookies [ 'example_cookie_name'])

あなたのクッキーを送信するために#サーバー、クッキーを使用することができるパラメータ
URL = 'http://httpbin.org/cookies'
クッキー= dictの(cookies_are =」ワーキング')
R&LT requests.get =(URLとURL =、=クッキーのクッキー)
プリント(r.text)#' { "クッキー":{ "cookies_are": "作業"}}

オブジェクトは、それをRequestsCookieJarクッキーを返さそして、類似の挙動辞書
クロスドメイン用の#クロスパス。あなたは、クッキージャーの中の要求も広がる可能

JAR = requests.cookies.RequestsCookieJar()
jar.set( 'tasty_cookie'、 'YUM'、=ドメイン'httpbin.org'、パス= '/クッキー')
JARを。
URL = 'http://httpbin.org/cookies'
R = requests.get(URL = URL、クッキー=ジャー)
プリント(r.text)#「{ "クッキー":{ "tasty_cookie": "YUM"}} 「

13要求履歴をリダイレクト

公式ドキュメント

 

14アウトエラー

応答タイムアウトパラメータセットを待つ秒数後に停止するように#要求
#このパラメータを使用する必要があり、基本的にすべての生産コードの
ない場合は#を、あなたのプログラムは永遠に応答失われることがあります。
requests.get(「HTTP ://github.com '0.001からタイムアウト=)
' ''
トレースバック(最新のラストコール):
ファイル"<STDIN>"、1行目、<Module1を>インチ
requests.exceptions.Timeout:HTTPConnectionPool(=ホストのGitHubの。 COM」、ポート= 80):リクエスト時限OUT(0.001からタイムアウト=)。
『『』

『』』
かかわらず、身体ダウンロード応答の、唯一のアクティブな接続プロセスをタイムアウト
タイムアウト全体の応答時間の制限をダウンロードしますが、サーバーの場合ではありませんタイムアウト秒以内に応答しない、それが例外をトリガする
秒のタイムアウトでソケットにベースから受信したデータバイトがないとき
「」 '

15のエラーと例外

「'」
体験ネットワークの問題を:(DNSルックアップが失敗したなどとして、などの接続を拒否した)とき、ConnectionErrorは、例外がスローされます要求します。
HTTPリクエストが失敗したステータスコード、Response.raise_for_statusを返す場合()は例外HTTPErrorを送出します。
要求がタイムアウトした場合は、タイムアウト例外をスローします。
リクエストはTooManyRedirects例外をスローします設定リダイレクトの最大数を超えた場合。
明示的に例外をスローするすべての要求はrequests.exceptions.RequestExceptionから継承します。
「'」

 

おすすめ

転載: www.cnblogs.com/venicid/p/11284456.html