请求方式
HTTP发送的请求方式有四种:get,post,put,delete,常用的是get和post请求
get请求和post请求两者区别
区别1:对请求参数的处理方式不同
get请求:url+?+传输数据(参数),有多个参数时用“&”符号连接
post请求:把传递的数据放在HTTP请求包的Body数据中,数据包的格式可以是“参数名1=参数值1&参数名2=参数值2”,也可以是json格式(键值对)。json是一种通用的格式
区别2:传输数据大小不同
HTTP没有对传输数据的大小进行限制,也买有对URL的长度进行限制。而在实际开发中,存在以下限制:
get请求:特定浏览器和服务器对URL长度有限制。
post请求:各个服务器会对采用post方式提交的数据大小进行限制,例如Apache、IIS6都各自有配置
区别3:安全性不同
post方式的安全性比get方式的安全性高。get方式在地址栏可以直接看到请求数据,而post方式需要抓包才能获取到数据。
常见的HTTP返回状态码:
200(正常):表示一切正常,到了服务器,并且服务器正常的响应了你的请求。
302(临时重定向):指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。
304(未修改):表示客户机缓存的版本是最新的,客户机应该继续使用它,比如说前端js
403(禁止):服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置所致。
404(找不到)服务器上不存在客户机所请求的资源。
500(内部服务器错误):服务器端的CGI、ASP、JSP等程序发生错误。
HTTP接口测试
模块:python自带urllib模块
引用:import urllib.request
操作1:完成百度网页的访问,调用方法URLopen(url) ,获取状态码getcode()
import urllib.request
'''1.访问百度网页'''
url_1='https://www.baidu.com'#我们的接口地址要加对应的http或https
response_1=urllib.request.urlopen(url_1)
print('返回状态码是:',response_1.getcode())#获取返回的状态码
操作2:完成http之get请求----直接请求
1)测试地址以及数据:http://v.juhe.cn/weather/index
key=7447320c300e5ba5cdde29819e860059
2)分析get请求地址与数据的拼接方式
3)利用urllib. urlopen () 完成请求: read()读取返回的数据 decode()进行汉字转码
‘’‘2.完成http接口之get请求–直接请求’’’
import urllib.request
url_2='http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F%E5%B7%9E&key=7447320c300e5ba5cdde29819e860059'
response_2=urllib.request.urlopen(url_2)
result_2=response_2.read()#读取返回的内容而非状态码
result_2=result_2.decode('utf-8')#经过处理后,就可以看到这个请求是好的了
print(result_2)
操作3:完成http之get请求–数据封装在字典里面
1)利用urllib.parse中的urlencode()对字典参数数据进行转码
说明:urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串。
‘’‘3.完成http接口之get请求–数据封装在字典里’’’
import urllib.request
import urllib.parse#这个包用来对数据进行转码
url_3='http://v.juhe.cn/weather/index'
data_3={'cityname':'深圳','key':'7447320c300e5ba5cdde29819e860059','format':'2'}
data=urllib.parse.urlencode(data_3)#urlencode函数可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串
url_3=url_3+'?'+data
response_3=urllib.request.urlopen(url_3)
result_3=response_3.read()#读取返回的内容而非状态码
result_3=result_3.decode('utf-8')#经过处理后,就可以看到这个请求是好的了
print(result_3)
操作4:完成http之POST请求—数据封装在字典里面,不能跟URL拼接,只能用数据格式传递。使用post方式时,数据放在data或者body中,不能放在url中,放在url中将被忽略。
1)对字典进行转码
2) data=data.encode(‘utf-8’) 要对字典转码后进行编码,不然会报错:TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.
3) urllib.request.Request(url,data) 利用这个函数对地址与数据进行拼接传递。
'''4.完成http之post请求--数据封装在字典里'''
import urllib.request
import urllib.parse#这个包用来对数据进行转码
import json
url_4='http://v.juhe.cn/weather/index'
data_4={'cityname':'深圳','key':'7447320c300e5ba5cdde29819e860059','format':'2'}
data=urllib.parse.urlencode(data_4)#urlencode函数可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串
data=data.encode('utf-8')
req=urllib.request.Request(url_4,data)#拼接地址和参数
response=urllib.request.urlopen(req)
#打印结果
response=response.read()
response=response.decode("utf-8")
response_2=json.loads(response)
print(response)
print(response_2)
操作5:引入json模块+异常抛错处理,对返回的内容格式转化成dic格式,方便后面进行断言处理,
Json.dumps()是将dict转化成str格式,
Json.loads()是将str转化成dict格式。
'''4.完成http之post请求--数据封装在字典里'''
import urllib.request
import urllib.parse#这个包用来对数据进行转码
import json
url_4='http://v.juhe.cn/weather/index'
data_4={'cityname':'深圳','key':'7447320c300e5ba5cdde29819e860059','format':'2'}
data=urllib.parse.urlencode(data_4)#urlencode函数可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串
data=data.encode('utf-8')
req=urllib.request.Request(url_4,data)#拼接地址和参数
response=urllib.request.urlopen(req)
#打印结果
response=response.read()
response=response.decode("utf-8")
response_2=json.loads(response)
print(type(response))
print(type(response_2))