官方说明
https://docs.python-requests.org/en/master/index.html
发送get 请求
浏览器抓包
使用 chrome 浏览器 打开 https://movie.douban.com/
使用【F12 】快捷键 或者 右键—【检查】 打开开发者工具
打开【网络】
在网页上 点击【热门】 观察【网络】—【所有请求】
通过分析 可以进行抓包
分析可以看到 请求的网址,请求方法

同时也要注意 请求标头 (请求头信息)
请求参数
服务器返回结果
通过分析: 可以得到 豆瓣电影的接口信息
请求方法: GET
请求路径: https://movie.douban.com/j/search_subjects
请求参数:
{"type": "movie","tag": "热门","page_limit": 50,"page_start": 0}
请求头:
User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
服务器返回结果
get 请求代码
import requestsurl = "https://movie.douban.com/j/search_subjects"query_data = {"type": "movie","tag": "热门","page_limit": 50,"page_start": 0}# 发送getr = requests.get(url,params=query_data)# 请求头print(r.request.headers)print(r.status_code)print(r.text)
上面代码执行的时候,返回结果如下
并没有给我们返回具体的电影信息。
经过分析: 主要是因为发送的请求,请求头中 user-agent 是python的reqeusts。一般这个多用来作为爬虫,服务器拒绝这个请求返回结果。
定制请求头
在代码中需要添加信息头。
import requestsurl = "https://movie.douban.com/j/search_subjects"query_data = {"type": "movie","tag": "热门","page_limit": 50,"page_start": 0}headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"}# 发送get params 请求参数, headers 信息头r = requests.get(url,params=query_data,headers=headers)# 请求头print(r.request.headers)print(r.status_code)print(r.text)
查看服务器返回结果
post请求
用户注册接口
请求方式:POST
请求路径:http://49.233.108.117:28019/api/v1/user/register
请求headers
Content-Type: application/json
请求body:
{"loginName": "13388899999","password": "123456"}
接口分析
这个接口主要难点:每次注册的时候 用户名不能一样。
用户使用的是 11位手机号,最好的方式是使用代码随机生成一个手机号。
随机手机号码
使用 random模块进行
https://docs.python.org/zh-cn/3/library/random.html
import randomdef get_phone():"""生成随机的11位手机号码手机号的前缀; ['13','17','18','15']后面需要随机生成 9位数。:return:"""# 手机号码前缀 从列表中随机选择其中的一个值pre_phone = random.choice(['13','17','18','15'])# 随机的一个值nums = ""for i in range(9):# 每次随机的时候 生成 0-9 之间的一个数字num = random.randint(0,9)# 每次生成一个新的随机值 做一次拼接nums = nums + str(num)# 前缀和后面的值拼接在一起 组成手机号return pre_phone+numsphone = get_phone()print(phone)
发送post请求注册
import requestsimport randomdef get_phone():"""生成随机的11位手机号码手机号的前缀; ['13','17','18','15']后面需要随机生成 9位数。:return:"""# 手机号码前缀 从列表中随机选择其中的一个值pre_phone = random.choice(['13','17','18','15'])# 随机的一个值nums = ""for i in range(9):# 每次随机的时候 生成 0-9 之间的一个数字num = random.randint(0,9)# 每次生成一个新的随机值 做一次拼接nums = nums + str(num)# 前缀和后面的值拼接在一起 组成手机号return pre_phone+numsurl = "http://49.233.108.117:28019/api/v1/user/register"body_data = {"loginName": get_phone(), # 通过调用函数 生成手机号码"password": "123456"}# 发送 json 格式 post请求r = requests.post(url,json=body_data)# 状态码print(r.status_code)# 请求头print(r.request.headers)# 服务器返回结果print(r.text)print(r.json())
面试问题
- 接口中如果要添加额外的请求信息,比如信息头这些,你是怎么处理的?
在reqeuests 请求中 添加 headers 参数,所有的请求头信息的内容 都放在字典数据格式中调用requests 传出去即可。
- 有些接口中的参数值 每次都不固定,你是怎么处理的?
自己封装函数,生成随机的值。
主要使用 random 模块
比如 注册接口中使用用户名每次都不一样。
