Requests02--Get方法

requests.get方法

requests.get的作用

用于实现使用get方法发送http请求,get方法主要是用来获取资源
根据接口需求来确定是不是使用get方法

requests.get如何使用

res=requests.get(url,params,headers,auth,cookies,timeout,verift)
1)这句话表示模拟get方法发送请求
2)get表示http的get方法
3)get参数内容
	url 接口地址
        params 表示发送接口数据
	headers 请求头
	auth 用户认证
	cookies 辨别用户身份进行会话保持
	timeout 超时  等待时间(多少秒后提示超时)
        verift 根据https请求的参数
        最常用的参数url params
        url必须填写 其他的根据实际情况选择是否要使用
4)res是响应结果(自定义对象名),存储着响应头和响应体
  ①响应状态码:res.status_code
  ②响应正文:res.text
      <1>可查看任意响应类型的响应正文,一般用于查看text/html类型的响应正文
      <2>使用res.text查看响应正文时,python将响应正文统一转为字符串类型

使用GET方法访问无参接口

使用get访问无参接口,查看状态码、响应体和响应正文的数据类型

"""
需求:
	接口地址:http://接口服务器IP/apitest/ui-login/
	方法:get
	参数:无
	响应类型:text/html
	预期包含文本:<input type="text" name="username">
"""
import requests #1、导入requests
address='http://192.168.139.129/apitest/ui-login/' #2、指定接口地址
res=requests.get(url=address) #3、使用get方法,发送请求,获得响应,将响应结果存入res这个变量中
# print(res)
print(res.status_code) #4、查看响应-响应状态吗
print(res.text) #4、查看响应-响应体、响应正文
print(type(res.text)) #4、查看响应-响应正文的数据类型

使用GET方法访问无参接口

get访问无参接口,查看状态码、响应体和响应正文的类型

"""
接口地址:http://服务器IP/apitest/one-param/
方法:get
参数:无
响应类型:text/html
预期包含文本:请使用ID参数进行访问
"""
import requests
url='http://192.168.139.129/apitest/one-param/' #接口地址
res=requests.get(url)
print(res.status_code)
print(res.text) #text会自动把响应正文变为字符串
print(type(res.text))
print(res.headers) #响应头,内容类型/响应类型:'Content-Type': 'text/html
print(res.headers['content-type']) #响应类型

使用GET方法访问无参接口

get访问无参接口,查看状态码、响应体和响应正文的类型

"""
接口需求
    接口地址:http://接口服务器IP:8000/login_action
    方法:get
    参数:无
    返回值:响应文本中包含Guest System、Sign in等文本
"""
import requests
url = "http://192.168.139.129:8000/login_action"
result = requests.get(url)
print(result.content)
# b byte:字节,二进制,binary
# content表示使用二进制形式显示数据,显示响应内容
# decode表示解码(把二进制数据变成字符),中文使用utf-8
print(result.content.decode('utf-8'))
# print(result.status_code)
# print(result.text)
print(type(result)) # type类型,种类
# <class 'requests.models.Response'> 是response类下面的一个对象

③响应类型:res.headers[‘content-type’]
<1>响应类型是开发设定的响应正文的类型
headers是响应头
④json类型的响应正文:res.json()
<1>只能用于查看json类型的响应结果,json()用于将json字符串转为python字典
<2>对比
a)如果响应类型是text/html,只能使用res.text查看响应正文(不能使用res.json(),会报错)
b)res.text看到的内容是开发人员写的代码的原始样式(除汉字,汉字会显示为unicode编码,也叫json字符串)
c)res.json()会对json字符串进行格式化(统一格式),所有键用单引号定界,冒号后面加1个空格,逗号后面加1个空格
d)如果响应类型是application/json(简称json),使用res.text、res.json()都可以,但常用res.json()
e)res.text的结果是字符串格式,res.json()的结果是字典格式

get访问无参接口

"""
get访问无参接口,分别使用text和json查看响应文本、响应类型、响应文本的类型
地址:http://服务器IP/apitest/get-json/
功能:json中的键按字母顺序升序排列
方法:get
参数:无
响应类型:json
预期包含:json对象/字符串
"""
import requests
url='http://192.168.139.129/apitest/get-json/'
res=requests.get(url)
print(res.text,type(res.text))
print(res.json(),type(res.json()))

res=requests.get(url, params)

1)params表示发送给接口地址的参数,代表需要接口处理的数据
2)params多数情况下是一个字典格式,其中参数名作为键,参数值作为值,形如:{‘参数名1’:值1, ’参数名2’:值2}
3)可以把参数放到url的末尾,但很少使用
url='http://IP/应用名/接口名/?参数名=值'
url = 'http://192.168.175.128/apitest/ui-login/',这个叫字符串,单引号是字符串的定界符
第一个单引号表示开始 第二个单引号表示结束
字典:
x = {"a":"hello","b":"3"}
第一使用大括号
第二a,b叫键不能重复
第三hello、3叫数据,英文冒号是固定写法
第四x是字典名
字典里面的键可以使用单引号或者双引号
json中的键只能使用双引号
requests.get(url,params={"参数名":值})
参数名要加引号,值如果是字符串也要加引号

GET访问有参接口

"""
接口地址:http://IP/apitest/one-param/
请求方法:get
接口功能:根据用户id查询用户信息
参数:id(含义:用户编号)
数据库和表:用户信息存储在apitest数据库的users表中
响应类型:text/html
预期返回:显示用户名和密码或不显示
数据库和表:用户信息存储在apitest数据库的users表中
    以上内容都是接口文档中描述的
在服务器上运用dos窗口访问数据库
    mysql -uroot -p123456
    -u 用户名 root
    -p 密码 123456
    show databases; --查看有哪些数据库
    目前使用 apitest数据库
    use apitest; 使用apitest
    show tables;查看当前数据库有哪些表
    select * from users;从users表中查看所有的信息
    数据使用依据 -- 根据数据库来使用响应测试数据
"""
import requests #1、导入requests
#写法1
# url='http://192.168.139.129/apitest/one-param/' #2、指定接口地址
# args={'id':1} #3、指定参数,值去查数据库
# res=requests.get(url, args) #4、发送请求,获得响应
# print(res.text) #5、查看响应结果
#写法2
url='http://192.168.139.129/apitest/one-param/?id=1' #这种写法只限get方法
res=requests.get(url)
print(res.text)

get访问有参接口

"""
接口地址:http://IP/apitest/multi-params/
请求方法:get
接口功能:根据用户id、username查询用户信息
参数:id、username
数据库.表:apitest.users
响应类型:text/html
预期返回:显示用户名和密码或不显示
"""
import requests
#写法1
# url='http://192.168.139.129/apitest/multi-params/'
# args={'id':1,'username':'dumb'}
# res=requests.get(url,args)
# print(res.text)
## print(res.json()) #错,json.decoder.JSONDecodeError,json解码错误,把响应结果变成字典时出错
url='http://192.168.139.129/apitest/multi-params/?id=1&username=dumb'
res=requests.get(url)
print(res.text)

requests.get(url,headers)

headers叫请求头,用于指定请求的附加信息
请求头明面看不到,但是可以通过抓包工具可以看到,代码也可以看到
指定请求头,可以用来模拟客户使用的浏览器、操作系统以及版本
headers用于指定请求头信息,通常用来指定来发送请求的附加信息,如:
模拟浏览器,操作系统的名称、版本、位数等
coolkie session token等通常也会放在请求头中
headers一般使用字典形式:
headers={'user-agent':'IE/8(Windows NT 6.1;Win64;x64)'}
# Windows NT 6.1 代表 win7系统
# Win64 64位操作系统
headers={"User-Agent":"Android/9"}
# Android/9模拟安卓9版本操作系统
网络爬虫经常使用,在访问被网站拦截后,就模拟其他浏览器或操作系统等进行爬虫

"""
    指定请求头访问URL
    模拟使用IE8和Android9访问百度
"""
import requests
url = 'http://www.baidu.com'
# r = requests.get(url,headers={'user-agent':'IE8'}) # 右侧为请求,左侧为响应
r = requests.get(url,headers={'user-agent':'Android/9'})
print(r.text)
"""
    指定请求头访问接口
    接口地址:http://httpbin.org/get
    请求头:IE/8(windos NT 6.1;Win64;x64)
    参数:test
    返回值:请求头中包含"User-Agent":"IE/8(Windows NT 6.1;Win64;x64)"
"""
import requests
url = "http://httpbin.org/get"
data = {"test":"abc"}
r = requests.get(url,params=data,headers={"User-Agent":"IE/8(Windows NT 6.1;Win64;x64)"})
print("IE/8(Windows NT 6.1;Win64;x64)" in r.text)
上一篇:Requests03--POST方法


下一篇:做项目的思路总结!!