python http的get、post用法,表单提交和非表单提交的区别

import requests

#get请求
re=requests.get(‘https://www.baidu.com/’) #通过网址请求数据

print(re) #返回<Response [200]>
print(re.status_code) #单独返回响应码:200
print(re.url) #返回请求的网址https://www.baidu.com/
print(re.text[:200]) #返回请求内容前200字符,该内容已解码
print(re.encoding) #获取编码类型ISO-8859-1
print(re.content[:200]) #获取未解码的内容

#加参数进行get请求
re=requests.get(‘https://www.baidu.com/s?wd=你好&rsv_spt=1’) #问号?后面加参数,以‘wd=你好&rsv_spt=1’这样的方式可以加多个参数

#通过字典的方式进行传参数
payload={‘wd’:‘你好’,‘rsv_spt’:1}
re=requests.get(‘https://www.baidu.com/s’,params=payload)

#通过字段的方式给同一个参数传两次值
payload={‘wd’:‘你好’,‘rsv_spt’:[1,2]}
re=requests.get(‘https://www.baidu.com/s’,params=payload)

#post请求
re=requests.post(‘https://www.baidu.com/s’,data={‘wd’:‘你好’,‘rsv_spt’:1}) #此处为表单提交方式,在报文里展示为:wd=你好&rsv_spt=1,在报文里其他的展示方式为非表单提交,如{‘wd’:‘你好’,‘rsv_spt’:1}

#将参数提取出来
payload=((‘wd’,‘nihao’),(‘rsv_spt’,1)) #也是表单提交的方式 ,在报文中展示为"form": {“rsv_spt”: “1”,“wd”: “nihao”},该处为字典
re=requests.post(‘https://www.baidu.com/s’,data=payload)

#非表单方式提交参数;表单方式主要针对字典或元组方式的参数,非表单主要针对字符串类型的参数
import json

url=‘https://www.baidu.com/s’
payload={‘wd’:‘nihao’,‘rsv_spt’:1}
re=requests.post(url,data=json.dumps(payload)) #非表单方式提交参数,在报文中展示为"data": “{“wd”: “nihao”, “rsv_spt”: 1}”,该处为字符串
re=requests.post(url,json=payload) #此处也是非表单提交,json参数自动将payload内容转换为字符串

#requests的其他方法
re=requests.put(‘https://www.baidu.com/put’,data={‘wd’:‘你好’,‘rsv_spt’:1})
#PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。(所以PUT用来改资源)
#Post请求:后一个请求不会把第一个请求覆盖掉。(所以Post用来增资源)

re=requests.delete(‘https://www.baidu.com/delete’) #删除数据
re=requests.head(‘https://www.baidu.com/get’) #获取头信息
re=requests.options(‘https://www.baidu.com/get’) #获取服务器支持哪种方法请求

r=requests.get(‘https://api.github.com/events’,stream=True)
print(r.json()[0]) #将返回的字符串转换为列表或字典,取第一个元素
r.raw.read #返回的内容为传输过程中的二进制数据,,bytes类型的数据(未带编码格式的二进制数据)

with open(‘e:\a.txt’,‘wb’) as fd: #将返回的内容写进文件中
for i in r.iter_content(1000): #每次写入1000字符,循环全部写入,该内容未解码,bytes类型的数据(带编码类型的二进制数据)
fd.write(i)

url=‘http://httpbin.org/post’
files={‘file’:(‘report.xls’,open(‘e:\a.xlsx’,‘rb’),‘application/vnd.ms-excel’,{‘Expires’:‘0’})}
#'report.xls’表示传送给服务器的文件命个名,,open(‘e:\a.xlsx’,‘rb’)打开本地文件,'application/vnd.ms-excel’告诉服务器该文件为excel格式,‘Expires’:'0’表示不过期
r=requests.post(url,files=files) #发送一个文件内容给服务器
r.status_code #返回一个状态码
r.status_code==requests.codes.ok #判断状态码是否为200,如果我是,返回True
r.raise_for_status() #返回的状态码不是200时,抛出异常
r.headers #获取响应头信息,存在一个字典里
r.headers[‘Content-Type’] #获取’Content-Type’对应的值
r.headers.get(‘content_type’)

url=‘https://www.baidu.com’
r=requests.get(url)
print(r.cookies) #获取服务器的cookies列表,以字典形式存储
print(r.cookies[‘BDORZ’]) #获取cookies中名字叫’BDORZ’的值
for k,v in r.cookies.items():
print(k,v) #获取cookies的key和value值

cookies=dict(a=‘zhangsan’,b=‘lisi’)
r=requests.get(url,cookies=cookies) #将cookies信息发送给服务器端

requests.get(url,timeout=3) #连接超时设置,超过三秒就报错

r=requests.head(‘http://github.com’,allow_redirects=True) #重定向,如果allow_redirects=False,禁止跳转
print(r.url) #重定向获得网址https://github.com/
print(r.history[0].url) #重定向前的网址http://github.com/
print(r.history) #响应码对象[<Response [301]>]

s=requests.Session() #跨请求主体传cookie,可存储获取到服务器的cookie
s.get(‘http://httpbin.org/cookies/set/sessioncookie/123456789’)
#将上一个请求中获取到的cookie发送给下一个网址
r=s.get(‘http://httpbin.org/cookies’)

s=requests.Session() #跨请求主体传cookie,可存储获取到服务器的cookie
s.auth=(‘user’,‘pass’) #如果网页要求用户名密码,可在此处设置
s.headers.update({‘a’:‘zhangsan’}) #给所有请求的请求头添加一个默认的信息
r=s.get(‘http://httpbin.org/headers’,headers={‘b’:‘lisi’}) #给本次请求添加一个请求头信息

猜你喜欢

转载自blog.csdn.net/weixin_44123630/article/details/113417637