python-request模块发送带传参的get和post请求

request 模块主要分为两个传参部分 get 和 post
一、get请求

基本形式

1
2
3
4
5
6
7
import requests

url = 'http://www.baidu.com'  # 使用?携带参数
r = requests.get(url)
#简单的get请求 用request.get()而需要自定义请求头的get用request.Request()
#简单的get请求只能把数据放在url里
print(r.text)#text:获得借口返回值的文本格式

1、url格式:http://接口地址?key1=value1&key2=value2
传参一般用字典:params={key1: value1, key2: value2}
涉及到的问题:

(1)如果参数中包含汉字 ,则会报编码错误
此处用

1
urllib.parse.urlencode(dic)

实现对字典的转码(将utf-8转为ascii码),此处转码后的结果可直接与url拼接成新的 url_end。
解码可以用

1
urllib.parse.unquote(dic or str)

(2)get传参的几个常用参数

header : 请求头 (后详细讲请求头的定制)

params : 用于传递测试接口所要用的参数,常用字典形式。

timeout : 设置最大访问时间,若超出该时间未接收到接口的反应会报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import urllib.request
import urllib.parse

keyword = input('请输入搜索关键字:')
a  = urllib.parse.urlencode( { 'wd' : keyword } )
#b = urllib.parse.unquote(a)  实现a的解码
header = {'user-Agent':’haha‘}
end_url = 'http://www.baidu.com/s?'+a
c  = request.Request( end_url,headers = header )#访问

#获得响应
with request.urlopen(c) as f :
    for line in f.readlines():
        print(line)

二、post请求

与request.Request类似
区别 Request 传参时 用params ,post 用 data

案例来自 LilyoO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests
# 请求数据
url = 'http://api.shein.com/v2/member/login'
header = {
    'content-type': 'application/x-www-form-urlencoded'
}
data = {
    'user_id': '123456',
    'email': '[email protected]'
}
timeout = 0.5
req = requests.post(url, headers=header, data=data, timeout=timeout)  # 发post请求
print(req.text)
print(type(req.json()))

想进一步深入理解GET和POST两种基本请求方法的区别:https://www.cnblogs.com/logsharing/p/8448446.html