GET、POST请求
一、Get请求:
传递url参数
在get请求中,使用params关键字,以一个字典来传递这些参数,如果字典中存在None的值,是不会添加到url请求中的、

ps:不使用params的话,也可在请求中输入全部的地址,效果相同,如:
r=requests.get(‘http://m.xxxxx.com/api/v2/activities?pageIndex=1&pageSize=10&categoryId=9‘)
Get请求示例:
1 import requests 2 3 url="https://api.github.com/events" 4 res = requests.get(url) 5 print(res) 6 #反序列化 7 print(res.json()) 8 9 #Get请求,params传参,headers 10 res = requests.get(url="http://httpbin.org/get", 11 params={"a":1,"b":2}, 12 headers={'User-Agent': '"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}) 13 print(res.json())
向服务器发送get请求:
无参数时:r = requests.get(url)
带params时:r = requests.get(url,params=params)
带params和headers时:r = requests.get(url,params=params,headers=headers)
1 #coding=utf-8 2 import unittest 3 import requests 4 5 class GetTest(unittest.TestCase): 6 7 def setUp(self): 8 host = 'https://httpbin.org/' 9 endpoint = 'get' 10 self.url = ''.join([host, endpoint]) 11 12 def test1(self): 13 u'''get无参数测试''' 14 r1 = requests.get(self.url)# 向服务器发送请求 15 code = r1.status_code #状态码 16 self.assertEqual(200,code) 17 print(r1.text) # unicode型文本 18 19 def test2(self): 20 u'''get带参数测试''' 21 params = {'show_env': '1'} 22 r2 = requests.get(self.url,params=params) 23 self.assertEqual(200, r2.status_code) 24 25 def test3(self): 26 u'''get带参数、带headers测试''' 27 params = {'show_env': '8'} 28 headers = {'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 29 'Accept': '*/*','User-Agent': 'python-requests/2.18.3'} 30 r = requests.get(self.url, params=params,headers=headers) 31 r3 = r.json() 32 print(r3) 33 connect = r3.get('headers').get('Connection') 34 self.assertEqual('close', connect) #断言 校验header里的Connection值 35 36 def tearDown(self): 37 pass 38 39 if __name__ == "__main__": 40 unittest.main()
二、Post请求:
在get请求中,使用data关键字,如果传递给data关键字的内容不是一个dict,而是一个string,那么在发送的时候,数据会被直接发送出去,不会自动编码为表单形式。为了将一个数据结构转换为json格式的字符串,首先得需要导入一个json包,两种常用的方法为:json.dumps()与json.loads()
Post请求示例:
1 mport requests 2 import json 3 4 headers = {"Content-Type": "application/json", 5 "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36", 6 "Accept-Encoding": "gzip, deflate, br"} 7 res = requests.post(url="https://juejin.im/auth/type/email",data=json.dumps({"email":"xzt875@126.com", "password":"13419926370"}),headers=headers) 8 t =res.json() 9 print(json.dumps(t))
1 #coding=utf-8 2 import unittest 3 import requests 4 5 class PostTest(unittest.TestCase): 6 7 def setUp(self): 8 host = 'https://httpbin.org/' 9 endpoint = 'post' 10 self.url = ''.join([host, endpoint]) 11 12 def testPost(self): 13 params = {'show_env':'1'} 14 json = { 15 'info': {'show_env': '2', 'sex': 'nv'}, 16 'code': 200, 17 'a': 'hello', 'b': 'nihao', 18 'files' : {'file': ('test.txt', 'hello')}, 19 'data': [{'name': 'zhangsan', 'id': '123'}, {'name': 'lisi', 'id': '125'}], 20 'id': 1900 21 } 22 23 r1 = requests.post(self.url,params=params,json=json) 24 resp1 = r1.json() 25 print(resp1) 26 connect = resp1['headers']['Connection'] 27 self.assertEqual(connect, 'close') 28 29 def tearDown(self): 30 pass 31 32 if __name__=='__main__': 33 unittest.main()
注意:
1.json编码支持的基本类型有:None, bool, int, float, string, list, tuple, dict。对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。
2.json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],如:

三、常见输出参数
# GET请求有参数时的请求写法。 import requests import json host = 'http://***.org/' #请求域名 (可以换成其他所需请求的域名) method = 'get' #请求的地址 url = ''.join([host,method]) #将请求域名与地址拼接,http://***.org/get params = {"show_env":1} #请求地址带的参数。没有后接参数时此行不需要,有多个请求参数时直接在里边添加 r = requests.get(url,params=params) #将请求的参数带人到请求地址中,然后向服务器发送请求。没有后接参数时就将,params=params删除,有多个时直接添加,用英文逗号隔开。 print(r.url) #获取请求的URL print(r.status_code,r.reason) #获取响应的状态码,状态码的原因 print(r.headers) #获取请求的响应头 print(r.text) #获取响应的body,以文本形式展示 print(r.content) #以图片文件形式展示 print(type(r.content)) #查看类型 print(r.request.headers) #获取请求的请求头 print(r.request.url) #获取请求的URL print(r.request.method) #获取请求的参数 response = r.json() print(response["headers"]) #获取响应结果中的headers值,并以字典的形式展示。 print(response["headers"]["Host"]) #获取响应结果中的headers中的host值,并以字典的形式展示,常用于断言来判断结果 print(eval(r.text)["headers"]["Host"]) #使用eval函数将以text形式响应的结果中的headers中的host的值以字典的形式展示,用的较多。

浙公网安备 33010602011771号