1. 程式人生 > 其它 >requests庫傳送請求、封裝、資料的管理

requests庫傳送請求、封裝、資料的管理

技術標籤:介面測試python

一,以multipart形式傳送post請求,只要將requests.post()的files引數即可

import requests,json
url = "http://httpbin.org/post"#一個測試網站的地址

files = {"file":open("test.txt","rb")}#在相對路徑下找到test.txt的檔案,給到files變數

re = requests.post(url,files=files)

print(re.text)

print
(re.status_code)

返回資料,注意files中的資料,就是TXT文字中寫入的內容,content型別是multipart/form-data

{
  "args": {},
  "data": "",
  "files": {
    "file": "Hello Python!!!!"
  },
  "form": {},
  "headers": {
    "Accept": "*/*"
, "Accept-Encoding": "gzip, deflate", "Content-Length": "160", "Content-Type": "multipart/form-data; boundary=a93c21e8ba7c134b0a78a6bdc992e75b", "Host": "httpbin.org", "User-Agent": "python-requests/2.24.0"
, "X-Amzn-Trace-Id": "Root=1-6018ec93-3376f0bf44a62fca34ac5163" }, "json": null, "origin": "202.127.0.116", "url": "http://httpbin.org/post" } 200

二,以json形式傳送請求

import requests,json

url = "http://httpbin.org/post"#一個測試網站的地址
data={"key1":"value1",
            "key2":"value2",
            "key3":"value3"}

#用json裡面的dumps方法將data資料轉換成json資料
json_data = json.dumps(data)
re = requests.post(url,json_data)

print(re.text)

print(re.status_code)

返回值如下,json裡有資料,jsons資料,這個為啥不顯示content-type?

{
  "args": {},
  "data": "{\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Content-Length": "54",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.24.0",
    "X-Amzn-Trace-Id": "Root=1-6018ee99-6d0939483ed19072080f386d"
  },
  "json": {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
  },
  "origin": "202.127.0.116",
  "url": "http://httpbin.org/post"
}

200

三,是最常用的方式,表單形式

import requests,json


url = "http://httpbin.org/post"#一個測試網站的地址
data={"key1":"value1",
            "key2":"value2",
            "key3":"value3"}


#這裡直接將資料傳入到請求裡面
re = requests.post(url,data)

print(re.text)
print(re.status_code)

輸出如下的內容:“Content-Type”: “application/x-www-form-urlencoded”,

{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Content-Length": "35",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.24.0",
    "X-Amzn-Trace-Id": "Root=1-6018f024-20df1180409fad4a7aebe307"
  },
  "json": null,
  "origin": "202.127.0.116",
  "url": "http://httpbin.org/post"
}

200

四,將上面的程式碼封裝一下
1,

`import requests
#新建一個檔案,命名為keyword_demo,將一些方法封裝,等著其他檔案呼叫
class KeyDemo:
    #新建一個類 ,下面包含get請求個post請求
    
    def get(self,url,header=None,params=None):
        return requests.get(url=url,headers=header,params=params)
        #傳入引數,url外預設為none

    def post(self,url,header=None,params=None):
        return requests.post(url=url,headers=header,params=params)

2,在一個名為demo的檔案中呼叫剛才封裝的類

#匯入剛才封裝的方法,from檔名import類名
from keyword_demo import KeyDemo


#例項化一個物件,可以拿著個物件去呼叫keyword_demo裡面的方法get和post
kd = KeyDemo()


url = "http://httpbin.org/post"#一個測試網站的地址
data={"key1":"value1",
            "key2":"value2",
            "key3":"value3"}

#這裡拿著例項化物件kd呼叫類KeyDemo的方法
re = kd.post(url=url,params=data)
print(re.text)
print(re.status_code)

返回資料跟之前直接使用requests庫一樣的資料

{
  "args": {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Content-Length": "0",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.24.0",
    "X-Amzn-Trace-Id": "Root=1-601900ed-4ce72146554fd82b71e664c9"
  },
  "json": null,
  "origin": "202.127.0.116",
  "url": "http://httpbin.org/post?key1=value1&key2=value2&key3=value3"
}

200

3,剛才執行了類的封裝和呼叫,現在要將資料也封裝進去。在同級目錄下新建一個檔案,命名為config.ini,內容為:
[DEFAULT]
url = http://httpbin.org/post
將此連結作為檔案匯入
4,呼叫剛才新建的ini檔案,注意read後面的路徑,同級目錄下就不用加上’…/’,如果是不同目錄,需要加上點點槓。

from keyword_demo import KeyDemo
#匯入這個庫
import configparser

#生成一個物件
conf = configparser.ConfigParser()
#用這個物件去讀檔案裡面的資訊
conf.read("config.ini")
#這句程式碼直接將連結打印出來,就是ini檔案中的url
print(conf.get("DEFAULT","url"))

4,到這一步,將URL也封裝了,現在將測試資料也封裝一下,就是
data={“key1”:“value1”,
“key2”:“value2”,
“key3”:“value3”}
咋封裝呢,新建一個檔案,叫login.yaml,建立以下資料,不弄太多組資料,容易亂
data:
key1:111111111111,
(插入一下,這個yaml檔案裡的data不能有逗號,像這樣也是可以的:
data:
key1:111111111111
key2:222222222222
key1:111111111111
key2:222222222222
key1:111111111111
key2:222222222222
key1:111111111111
key2:222222222222
key1:111111111111
key2:222222222222
key1:111111111111
key2:222222222222
key1:111111111111
key2:222222222222)
在這裡插入圖片描述
資料建立好了,我們要拿到這個資料,

from keyword_demo import KeyDemo
#匯入yaml包
import yaml
#生成一個檔案物件
file = open("login.yaml","r")
#用下面的命令將檔案開啟
data = yaml.load(file,yaml.FullLoader)
#輸出一個字典:{'data': 'key1:111111111111'}
print(data)

5,現在為止,就已經把所有的資料封裝完畢,彙總到demo檔案裡

#匯入自己封裝的類
from keyword_demo import KeyDemo
#匯入類為了獲得ini檔案中的url,以後可以用的url的地方都可以呼叫這個
import configparser
#匯入yaml為了獲得data資料
import yaml


#生成一個例項物件
kd = KeyDemo()

#獲取到url
conf = configparser.ConfigParser()
conf.read("config.ini")
url = conf.get("DEFAULT","url")


#獲取到data
file = open("login.yaml","r")
data = yaml.load(file,yaml.FullLoader)

#建立一個請求物件
re = kd.post(url=url,params=data)

print(re.text)
print(re.status_code)

輸出:

{
  "args": {
    "data": "key1:111111111111"
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Content-Length": "0",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.24.0",
    "X-Amzn-Trace-Id": "Root=1-60190d82-066258f37eccc1b429184705"
  },
  "json": null,
  "origin": "202.127.0.116",
  "url": "http://httpbin.org/post?data=key1%3A111111111111"
}

200