1. 程式人生 > >python第三方庫requests簡單介紹

python第三方庫requests簡單介紹

一、傳送請求與傳遞引數

簡單demo:

import requests
 
r = requests.get(url='http://www.itwhy.org')    # 最基本的GET請求
print(r.status_code)    # 獲取返回狀態
r = requests.get(url='http://dict.baidu.com/s', params={'wd':'python'})   #帶引數的GET請求
print(r.url)
print(r.text)   #列印解碼後的返回資料

 

1、帶引數的請求

import requests
requests.get(
'http://www.dict.baidu.com/s', params={'wd': 'python'}) #GET引數例項 requests.post('http://www.itwhy.org/wp-comments-post.php', data={'comment': '測試POST'}) #POST引數例項

 

2、post傳送json資料:

import requests
import json
 
r = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some'
: 'data'})) print(r.json())

 

3、定製header:

import requests
import json
 
data = {'some': 'data'}
headers = {'content-type': 'application/json',
           'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
 
r = requests.post('https://api.github.com/some/endpoint
', data=data, headers=headers) print(r.text)

 

二、response物件

使用requests方法後,會返回一個response物件,其儲存了伺服器響應的內容,如上例項中已經提到的 r.text、r.status_code……
獲取文字方式的響應體例項:當你訪問 r.text 之時,會使用其響應的文字編碼進行解碼,並且你可以修改其編碼讓 r.text 使用自定義的編碼進行解碼

響應:

r.status_code #響應狀態碼
r.raw #返回原始響應體,也就是 urllib 的 response 物件,使用 r.raw.read() 讀取
r.content #位元組方式的響應體,會自動為你解碼 gzip 和 deflate 壓縮
r.text #字串方式的響應體,會自動根據響應頭部的字元編碼進行解碼
r.headers #以字典物件儲存伺服器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回None
#*特殊方法*#
r.json() #Requests中內建的JSON解碼器
r.raise_for_status() #失敗請求(非200響應)丟擲異常

 

demo:

import requests
 
URL = 'http://ip.taobao.com/service/getIpInfo.php'  # 淘寶IP地址庫API
try:
    r = requests.get(URL, params={'ip': '8.8.8.8'}, timeout=1)
    r.raise_for_status()    # 如果響應狀態碼不是 200,就主動丟擲異常
except requests.RequestException as e:
    print(e)
else:
    result = r.json()
    print(type(result), result, sep='\n')


# 結果:
# <class 'dict'>
# {'code': 0, 'data': {'ip': '8.8.8.8', 'country': '美國', 'area': '', 'region': 'XX', 'city': 'XX', 'county': 'XX', 'isp': 'Level3', 'country_id': 'US', 'area_id': '', 'region_id': 'xx', 'city_id': 'xx', 'county_id': 'xx', 'isp_id': '200053'}}

 


 

三、上傳檔案

1、上傳檔案

import requests
 
url = 'http://127.0.0.1:5000/upload'
files = {'file': open('/home/lyb/sjzl.mpg', 'rb')}
#files = {'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))}     #顯式的設定檔名
 
r = requests.post(url, files=files)
print(r.text)

 

2、可以把字串當著檔案進行上傳:

import requests
 
url = 'http://127.0.0.1:5000/upload'
files = {'file': ('test.txt', b'Hello Requests.')}     #必需顯式的設定檔名
 
r = requests.post(url, files=files)
print(r.text)

 

四、身份驗證

1、基本身份認證(HTTP Basic Auth):

import requests
from requests.auth import HTTPBasicAuth
 
r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd'))
# r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd'))    # 簡寫
print(r.json())

 

2、非常流行的HTTP身份認證形式是摘要式身份認證,Requests對它的支援也是開箱即可用的:

requests.get(URL, auth=HTTPDigestAuth('user', 'pass'))

 

五、Cookies與會話物件

1、如果某個響應中包含一些Cookie,你可以快速訪問它們:

import requests
 
r = requests.get('http://www.google.com.hk/')
print(r.cookies['NID'])
print(tuple(r.cookies))

 

2、要想傳送你的cookies到伺服器,可以使用 cookies 引數:

import requests
 
url = 'http://httpbin.org/cookies'
cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Requests'}
# 在Cookie Version 0中規定空格、方括號、圓括號、等於號、逗號、雙引號、斜槓、問號、@,冒號,分號等特殊符號都不能作為Cookie的內容。
r = requests.get(url, cookies=cookies)
print(r.json())

 

六、超時與異常

timeout 僅對連線過程有效,與響應體的下載無關。

>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)

 

 

 

 

 

 備註:本文采集於:https://www.cnblogs.com/mrchige/p/6409444.html ,僅用於記錄筆記學習!