requests工作原理
通过追踪代码,可以发现requests实际上是调用了request方法,源码如下:
method, url是必填参数,其他是可选参数。
参数method,有GET
,OPTIONS
,HEAD
,POST
,PUT
,PATCH
,DELETE
。
可选参数可以发送data、json、headers、cookies、flies、auth、timeout、proxies、verify、stream、cert
(一)、get请求:两种方式:
第一种:请求参数保存在url里面,?后面添加参数名字,如果多个参数用&链接
url="http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13049352751"
r=requests.get(url=url)
第二种:请求参数保存在param中,params 参数用字典格式进行保存
url1="http://tcc.taobao.com/cc/json/mobile_tel_segment.htm"
params={
"tel":13049352751
}
r=requests.get(url=url1,params=params)
print(r.text) #打印返回的正文
print(r.status_code)#打印状态码
print(r.url)
print(r.cookies)
(二)、post请求
第一种:数据传输格式是表单的数据格式,数据是字典保存
import requests
url1="http://backend-alpha.talkline.cn/code/read_code"
data={"account":"+8613049350001"}
r=requests.post(url=url1,data=data)
print(r.text) #打印返回的正文
print(r.status_code)#打印状态码
print(r.url)
print(r.cooki
第二种:数据传输格式是json格式数据,也是用json格式保存
import requests
url1="http://backend-alpha.talkline.cn/code/read_code"
data={"account":"+8613049350001"}
r=requests.post(url=url1,json=data)
print(r.text) #打印返回的正文
print(r.status_code)#打印状态码
print(r.url)
print(r.cookies
(三)、获取登录cookies,并利用cookies跳过登录,访问登录后的页面
以12306例子为例
(四)、header值设置:
import requests
url = "https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2020-10-24&leftTicketDTO.from_station=FZS&leftTicketDTO.to_station=SHH&purpose_codes=ADULT"
# print(r_12306_request.text)
headers = {
'Cookie': '_uab_collina=160345135735282869894376; JSESSIONID=93543B181DE38582925B5AB863EE6E68; BIGipServerotn=1675165962.24610.0000; RAIL_EXPIRATION=1603712134126; RAIL_DEVICEID=n4PQ-kSZytMmEZgD_hikfzpWsS1C_ba2woIdg9H9DJZ-ZiwTte-Y2G53FJGOgywzrcJmonjq-Cm5QeJcR8ztopdjQFuaBj_-Wqy_OdasBKIhL-5x0v5AvbR7z8F7GZYZeXES_C19wD5VU1PVv5TiqglvYyASaUbR; BIGipServerpassport=887619850.50215.0000; route=c5c62a339e7744272a54643b3be5bf64; _jc_save_fromStation=%u798F%u5DDE%2CFZS; _jc_save_toStation=%u4E0A%u6D77%2CSHH; _jc_save_toDate=2020-10-23; _jc_save_wfdc_flag=dc; _jc_save_fromDate=2020-10-24'
}
r_12306_request = requests.get(url=url, headers=headers)
# print(r_12306_request.encoding)
# r_12306_request.encoding = "gb2312"
print(r_12306_request.content.decode()
(五)、 requests接口测试-https证书
https协议需要证书
发送请求时忽略证书,证书参数verify
import requests deftest_verify():
url='https://www.ctrip.com/'
r=requests.get(url=url,verify=False)
print(r.text)
(六)、requests接口测试-上传文件files参数
- 携程上传头像
import requests
def test_files():
url='https://sinfo.ctrip.com/MyInfo/Ajax/UploadPhoto.ashx' # 携程上传头像
cookies={'cookie': 'cookies的值'}
files={
# 复制地址可能会出现u202a错误
'uploadFile_753':('test.jpg',open('C:UserszegoDesktoptest.jpg','rb'),'image/jpeg')
}
r=requests.post(url=url,files=files,verify=False,cookies=cookies)
print(r.text)