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基本请求
向服务器发送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()
向服务器发Get请求

 

 二、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))
Post基本请求
 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()
向服务器发送Post请求

注意:

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的值以字典的形式展示,用的较多。

 

posted @ 2018-12-23 19:32  厉害的菜鸟  阅读(237)  评论(0)    收藏  举报