天天看點

Python3 Requests 子產品基礎介紹Python3 Requests 子產品

Python3 Requests 子產品

# Requests子產品是第三方子產品,需要預先安裝,requests子產品在python内置子產品的基礎上進行了高度的封裝,進而使得python進行網絡請求時,變得更加簡潔和人性化。
           

這篇文章主要是介紹Requests子產品的基礎使用

1、安裝

# 我們首先需要在自己的電腦中或者伺服器中找到自己pyhton解釋器安裝的環境位址
# 作者這邊主要用的是windows企業版的64位
# 打開自己的電腦cmd指令行,這一步相信大家都會,就不多做解釋了 輸入下面的指令進行安裝requests的錯誤
           
pip install requests
           

2、引用子產品

import requests
           

3、簡單運用

1、GET請求

1、發送無參數的get請求,嘗試擷取某個網頁.

2、發送無參數的get請求 設定逾時時間 timeout 機關秒3

response = requests.get('http://www.baidu.com', timeout=1)
           

3、發送帶參數的請求.

# 我們後端人員知道在發送get請求時大多是實在後面進行拼接的字元串,比如http://www.sougou.com?query='滿世繁華'
# 但是requests子產品是非常的貼心我們想到的問題,子產品作者也想到了這個問題,是以說requests子產品是允許進行傳值的隻需要我們去提供字典
# 舉例:
           
# 字典舉例:
keywords = {'query':'滿世繁華','key':'test'}
response = requests.get('http://www.baidu.com',params=keywords) # https://www.baidu.com/?query=滿世繁華&key=test
           
# 清單舉例:
keywords = {'query':'msfh','key':['value1','value2']}
response = requests.get('htpp://www.baidu.com',params=keywords)
# requests.get('htpp://www.baidu.com',params=keywords) = http://www.baidu.com?key=value1&key=value2&query=msfh
           

4、定制請求頭(headers)

# 如果我們在請求進行添加頭部,隻需要簡單的建立一個字典(dict)給headers參數就行
headers = {
    'Content-Type': 'text/html;charset=utf-8',
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}
response = requests.get(url=url,headers=headers)
           

5、Response對象使用.

response.url                             #列印輸出該 URL
response.headers                         #以字典對象存儲伺服器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則傳回None
response.status_code                     #傳回連接配接狀态,200正常。
response.text                            #預設以unicode形式傳回網頁内容,也就是網頁源碼的字元串。
response.content                         #以位元組形式(二進制)傳回。位元組方式的響應體,會自動為你解碼 gzip 和 deflate 壓縮。
response.json()                          #把網頁中的json資料轉成字典并将其傳回。
response.encoding                        #擷取目前的編碼
response.encoding = 'ISO-8859-1'         #指定編碼,r.text傳回的資料類型,寫在r.text之前。
           

2、POST請求

# HTTP 協定規定 POST 送出的資料必須放在消息主體(entity-body)中,但協定并沒有規定資料必須使用什麼編碼方式,服務端通過是根據請求頭中的Content-Type字段來獲知請求中的消息主體是用何種方式進行編碼,再對消息主體進行解析。具體的編碼方式包括:
           

1、最常見的post送出資料的方式,以form表單的形式送出資料

appplication/x-www-form-urlencoded
           

2、以Json字元串進行送出資料

application/json
           

3、檔案上傳

multipart/form-data
           

3、POST請求執行個體:

1、form表單發送POST請求

Reqeusts支援以form表單形式發送post請求,隻需要将請求的參數構造成一個字典,然後傳給requests.post()的data參數即可
import requests

keywords = {
    'key1': 'value1',
    'key2': 'value2'
}
response = requests.post("http://httpbin.org/post", data=keywords)
print(response.text)

# 底下是形式
...
"form": {
    "key1": "value1",
    "key2": "value2"
}
...
           

2、JSON形式發送POST請求

可以将一 json串傳給requests.post()的data參數,
import json
import requests

url = 'http://httpbin.org/post'
keywords = {'key1': 'value1', 'key2': 'value2'}

response = requests.post(url, data=json.dumps(keywords))
print(response.text)
print(response.headers.get('Content-Type'))

# application/json
           

3、multipart形式發送POST請求

Requests也支援以multipart形式發送post請求,隻需将一檔案傳給requests.post()的files參數即可,文本檔案report.txt的内容隻有一行:Hello world!,從請求的響應結果可以看到資料已上傳到服務端中。
import requests

url = 'http://httpbin.org/post'
files = {'file': open('report.txt', 'rb')}
response = requests.post(url, files=files)
print(response.text)


{
...
  "files": {
    "file": "hello world"
  }, 
  "form": {}, 
  "headers": {
    "Content-Type": "multipart/form-data; boundary=6db46af64e694661985109da21c8fe9b", 

  }, 
  "json": null, 
  "origin": "223.72.217.138", 
  "url": "http://httpbin.org/post"
  ...
}