python Requests 初級

一、介紹

    Requests 是用Python語言編寫,基於 urllib,但是它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語爲中心開發的,所以它比 urllib 更加 Pythoner。更重要的一點是它支持 Python3 !


二、用法   

    1、使用 Requests 發送網絡請求

  import requests
  r = requests.get('https://github.com/timeline.json')
  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")

    2、傳遞 URL 參數

    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.get("http://httpbin.org/get", params=payload)

    通過打印輸出該 URL,你能看到 URL 已被正確編碼:

    print(r.url)
        http://httpbin.org/get?key2=value2&key1=value1

    3、響應內容

    r.text可以看到地址響應的內容

    Requests 會自動解碼來自服務器的內容。大多數 unicode 字符集都能被無縫地解碼。

    4、二進制響應內容

    你也能以字節的方式訪問請求響應體

    r.content

    Requests 會自動爲你解碼 gzip 和 deflate 傳輸編碼的響應數據。

    例:以請求返回的二進制數據創建一張圖片:

   from PIL import Image
   from io import BytesIO
   i = Image.open(BytesIO(r.content))

    5、JSON 響應內容

    Requests 中也有一個內置的 JSON 解碼器

   import requests
   r = requests.get('https://github.com/timeline.json')

r.json() 如果 JSON 解碼失敗, r.json() 就會拋出一個異常。例如,響應內容是 401 (Unauthorized),嘗試訪問r.json() 將會拋出 ValueError: No JSON object could be decoded 異常。

    6、定製請求頭

   url = 'https://api.github.com/some/endpoint'
   headers = {'user-agent': 'my-app/0.0.1'}
   r = requests.get(url, headers=headers)

    所有的 header 值必須是 string、bytestring 或者 unicode。

    7、更加複雜的 POST 請求

   payload = (('key1', 'value1'), ('key1', 'value2'))
   r = requests.post('http://httpbin.org/post', data=payload)
   print(r.text)
  (json直接傳遞)
   import json
   url = 'https://api.github.com/some/endpoint'
   payload = {'some': 'data'}
   r = requests.post(url, data=json.dumps(payload))

    8、響應狀態碼

    r.status_code(狀態碼)

    r.raise_for_status()   (拋出異常)

    9、響應頭

    r.headers

    10、Cookie

 url = 'http://example.com/some/cookie/setting/url'
 r = requests.get(url)
 r.cookies['example_cookie_name']
 'example_cookie_value'
 發送你的cookies到服務器:(Cookie 的返回對象爲 RequestsCookieJar)
 r = 'http://httpbin.org/cookies'
 cookies = dict(cookies_are='working')
 r = requests.get(url, cookies=cookies)
 r.text
 '{"cookies": {"cookies_are": "working"}}'

    11、重定向與請求歷史

 默認情況下,除了 HEAD, Requests 會自動處理所有重定向。可以使用響應對象的 history 方法來追蹤重定向。

 Response.history 是一個 Response 對象的列表,爲了完成請求而創建了這些對象。這個對象列表按照從最老到最近的請求進行排序。

    例:Github 將所有的 HTTP 請求重定向到 HTTPS:

   r = requests.get('http://github.com')
   r.url
   'https://github.com/'
   r.status_code
   200
   r.history
   [<Response [301]>]

    可以通過 allow_redirects 參數禁用重定向處理:

   r = requests.get('http://github.com', allow_redirects=False)
   r.status_code
   301
   r.history
   []

    12、超時

  你可以告訴 requests在經過以timeout參數設定的秒數時間之後停止等待響應。如果不使用,你的程序可能會永遠失去響應:

  requests.get('http://github.com', timeout=0.001)

  注意:

  timeout僅對連接過程有效,與響應體的下載無關。timeout並不是整個下載響應的時間限制,而是如果服務器在timeout秒內沒有應答,將會引發一個異常。

    13、錯誤與異常

    遇到網絡問題(如:DNS 查詢失敗、拒絕連接等)時,Requests 會拋出一個 ConnectionError 異常。

    如果 HTTP 請求返回了不成功的狀態碼, Response.raise_for_status() 會拋出一個 HTTPError 異常。

    若請求超時,則拋出一個 Timeout 異常。

    若請求超過了設定的最大重定向次數,則會拋出一個 TooManyRedirects 異常。

        


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章