准备工作
这一部分需要用到request模块,准备工作就是安装request模块。
安装方法移步:https://www.cnblogs.com/jszfy/p/11210783.html
用request.get()发起请求
import requests # 1、构造请求的URL url = "http://..." # 2、创建请求参数 params = { "mobilephone": "18012345678", "pwd": "123456", "regname": "zfy" } headers ={ "User-Agent":"Mozillas/5.0 test" } # 3、向服务器发起请求 res = requests.get(url, params=params, headers=headers) print(res.text) print(res.json()) print(res.cookies)
res:返回的【response】对象,可以通过【res.属性名】来获取相应的属性内容。
根据URL可以看出,这里是使用【查询字符串参数】的格式进行传参的。
headers不一定要改,因为有的网站有反爬虫措施,所以需要自己添加合法的请求头。
但是大多数情况下不用修改。
用request.post()方法发起请求
import requests # 1、构造请求的URL url = "http://...." # 2、创建请求参数 params = { "mobilephone": "17012345678", "pwd": "123456", "regname": "zfy" } headers ={ "User-Agent": "Mozillas/5.0 test" } # 3、向服务器发起请求 # 将参数传递给params,是以查询字符串参数的形式传递参数的 res = requests.post(url, params=params, headers=headers) # 返回的是一个response对象,可以把它当做一个响应报文。 # 将参数传递给data,会以x-www-form-urlencoded的形式来传参 res2 = requests.post(url, data=params, headers=headers) # 如果给json传参,会以json格式的字符串形式来传参。 res3 = requests.post(url, json=params, headers=headers)
测试的某个接口需要使用多个URL
import requests # 1、构造请求URL login_url = "http://。。" recharge_url = "http://。。" # 2、创建请求参数 login_params = { "mobilephone": "17012345678", "pwd": "123456", } recharge_params ={ "mobilephone": "17012345678", "amount": "500000", } headers = { "User-Agent": "Mozilla/5.0 sunny" } # 3. 向服务器发起请求 # 先登录 login_res = requests.post(login_url, data=login_params, headers=headers) # cookie = login_res.cookies['JSESSIONID'] cookie = login_res.cookies # 充值 recharge_res = requests.post(recharge_url, data=recharge_params, headers=headers, cookies=cookie)
session会话
创建会话对象session,可以管理cookie值,而不用手动传递。
关闭会话之后,依然可以发起请求、
# 向服务器发起请求 one_session = requests.Session() # 先登录 login_res = one_session.post(login_url, data=login_params, headers=headers) # 充值 recharge_res = one_session.post(recharge_url, data=recharge_params, headers=headers) # 关闭会话 # 关闭之后, 依然可以发起请求 # 关闭会话只不过是释放资源 one_session.close()
封装
class HandleRequest: """ 处理请求 """ def __init__(self): self.one_session = requests.Session() def to_request(self, url, method="post", data=None, is_json=False): # data = '{"name": "Elice"}' # json格式的字符串 # data = "{'name': 'Elice'}" # 字典类型的字符串 if isinstance(data, str): try: data = json.loads(data) except Exception as e: print("使用日志器来记录日志") data = eval(data) method = method.lower() if method == "get": res = self.one_session.get(url, params=data) elif method == "post": if is_json: # 如果is_json为True, 那么以json格式的形式来传参 res = self.one_session.post(url, json=data) else: # 如果is_json为False, 那么以www-form的形式来传参 res = self.one_session.post(url, data=data) else: res = None print("不支持【{}】其他方法的请求".format(method)) def close(self): self.one_session.close()