【乾物】requestsの使い方

6888 ワード

Requests is an elegant and simple HTTP library for Python, built for human beings.
2つの重要な方法:getとpost
requests.get()
構文
r = requests.get(url, params={}, headers={}, cookies={}, allow_redirects=True, timeout=float, proxies={}, verify=True)
パラメータの説明
パラメータ名
を選択します.
説明
url
str
要求アドレス、必須
params
dict
パラメータ、辞書のタイプを設定します.たとえば、{‘key 1’:‘value 1’,‘key 2’:‘value 2’};
headers
dict
ヘッダ、辞書タイプ、例えば{'user-agent':'my-app/0.0.1'};
cookies
dict
クッキー、辞書のタイプを設定します.たとえば、{「key」:「value」};
allow_redirects
bool
リダイレクトを設定し、デフォルトでオンにします.
timeout
float
要求タイムアウト時間を設定する(s);
proxies
dict
エージェント、辞書のタイプを設定します.http://10.10.1.10:8080“};
verify
bool
証明書検証、デフォルトTrue、またはCAライブラリアドレスを設定します.
注意:verify=Falseの場合、警告が表示されます.packages.urllib3 requests.packages.urllib3.disable_warnings();
requests.post()
構文
r = requests.post(url, data={}, headers={}, cookies={}, json=”, files={}, allow_redirects=True, timeout=float, proxies={}, verify=True)
パラメータの説明
パラメータ名
を選択します.
説明
url
str
要求アドレス、必須
data
dict
フォームデータ、辞書タイプを設定します.jsonを受信することもできる.dumps()後のデータ;
headers
dict
ヘッダ、辞書タイプ、例えば{'user-agent':'my-app/0.0.1'};
cookies
dict
クッキー、辞書のタイプを設定します.たとえば、{「key」:「value」};
json
str
jsonデータを渡す:{‘key’:‘value’};
files
dict
ファイルをアップロードします:{‘file’:open(‘report.txt’,‘rb’)}.注意:ファイルを開くにはバイナリを使用したほうがいいです.
allow_redirects
bool
リダイレクトを設定し、デフォルトでオンにします.
timeout
float
要求タイムアウト時間を設定する(s);
proxies
dict
エージェント、辞書のタイプを設定します.http://10.10.1.10:8080“};
verify
bool
証明書検証、デフォルトTrue、またはCAライブラリアドレスを設定します.
リクエスト応答体の説明
フィールド
を選択します.
説明
r.url
str
エンコードされたリクエストurl
r.text
unicode
処理後のUnicode型データを返す
r.content
str
bytes型の元のデータ(バイナリ)を返します.
r.json()
dict
jsonデータを復号して返す
r.status_code
int
応答ステータスコードを返す
r.raise_for_status()
エラーリクエストを送信すると、この例外が放出されます.
r.headers
dict
サーバ応答ヘッダ情報
r.cookies
dict
Responseのcookies
r.history
list
Responseオブジェクト(リクエスト履歴)リストは、最も古いリクエストから最近のリクエストまでソートされます.
r.encoding
str
r.text出力の符号化フォーマット、すなわちウェブ符号化
r.apparent_encoding
str
r.content元データ符号化タイプ
r.elapsed
urlリクエストに時間がかかる
r.request.headers
dict
リクエストヘッダ情報
requests.utilsでの一般的な方法
  • requests.utils.get_encodings_from_content(r.content):元のデータ符号化を返します.
  • requests.utils.dict_from_Cookiejar(r.cookies):CookieJarを辞書に変換します.
  • requests.utils.cookiejar_from_dict(cookie_dict,cookiejar=None,overwrite=True):辞書をCookieJarに変換します.

  • 問題と解決策
    セッションを開き、クッキーを保持
    s = requests.Session()             #     
    cookies = json.loads(result)                     # phantomjs   cookies json  
    cookie = {}
    for k in cookies:
        cookie[k['name']] = k['value']               #     cookie  name value
    s.cookies = requests.utils.cookiejar_from_dict(cookie, cookiejar=None, overwrite=True)       #    cookie   cookieJar,       
    s.get(url.....)                    #           cookie
    ---------
    s.cookies: cookiejar  ;
    s.cookies.get_dict(): dict,cookie   ;

    タイムアウトと最大試行回数の設定
  • timeoutはget/post等のパラメータ、単位秒である.
  • max_retriesはHTTPAdapterを構築し、max_を設定する必要があります.retriesは、最後にこのAdaptorをrequestsのSessionオブジェクトにロードする.mount時のリンクはフロントエンドの最大マッチングであり、「http://」と「https://」を用いてそれぞれ2種類のウェブサイトに対応することができる.より具体的には、あるサイトに対してもよい.
  • requestsSession = requests.Session()                                #     
    requestsAdapterA = requests.adapters.HTTPAdapter(max_retries=3)     #      
    requestsSession.mount('http://', requestsAdapterA)                  #         http  
    r = requestsSession.get(url , timeout=20)                           #     url     
  • 注:max_retriesはタイムアウトに適用され、アクセスエラーには適用されません.
  • 注:セッションではurl 1を要求して返されたcookiesが自動的に保存され、url 2にアクセスすると自動的に持ち込まれます.

  • ファイルのアップロード
    url = 'http://httpbin.org/post'
    files = {'file': open('report.xls', 'rb')}
    # files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}   #         、    、   
    r = requests.post(url, files=files)
    r.text

    ストリーミングアップロード
    with open('xxx.txt') as fp:
        requests.post('http://some.url/api', data=fp)

    ファイルのダウンロード
    from PIL import Image
    from StringIO import StringIO
    
    url = 'http://xxx.jpg'
    r = requests.get(url)
    i = Image.open(StringIO(r.content))
    i.save('local.jpg')

    注意事項
  • get()またはpost()のheaders、cookies設定の値は、Requestsにマージされるので、{}が入っても大丈夫です.
  • ピクチャ、pdfなどの開き方は「wb」であり、書き込まれた内容はr.contentであるべきである.
  • 応答ヘッダContent-Typeにcharsetが含まれていない場合、r.textのデフォルトは「ISO-8859-1」である.
  • timeoutに表示されていない設定の場合、理論的にはrequestsリクエストはタイムアウトしません.
  • sessionでパラメータを削除し、その値をNoneに直接設定します.

  • ドキュメントリソース
  • http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
  • http://docs.python-requests.org/zh_CN/latest/user/advanced.html#advanced
  • http://platinhom.github.io/2015/12/25/py-requests/