使用requests,它的七个主要方法,在这里只讲两个:get、post
>>>
import
requests
>>> r=requests.get(
"http://www.baidu.com"
)
>>> r.status_code 200
>>> r.encoding
'ISO-8859-1'
>>> r.apparent_encoding
'utf-8'
>>> r.text # 发现编码不行,改编码
>>> r.encoding=
'utf-8'
注意requests库有时会产生异常,比如网络连接错误、http错误异常、重定向异常、请求url超时异常等等。所以我们需要判断r.status_codes是否是200。
我们可以利用r.raise_for_status()语句去捕捉异常,该语句在方法内部判断r.status_code是否等于200,如果不等于,则抛出异常。
一个爬取网页的通用代码框架:
try:
r=requests.get(url,timeout=30)
#请求超时时间为30秒
r.raise_for_status()
#如果状态不是200,则引发异常
r.encoding=r.apparent_encoding
#配置编码
return
r.text
except:
return
"产生异常"
params = {
'k1'
:
'v1'
,
'k2'
:
'v2'
}
r = requests.post(
'http://192.168.165.4:8000/show/testreport/'
,data=params)
在服务器端用request.POST.get(
"data"
)什么也获取不到,用request.body获取到的是b
'k2=v2&k1=v1'
,
但这样的格式怎么也转不成字典,
r = requests.post(
'http://192.168.165.4:8000/show/testreport/'
,json=params)
用request.body获取到b
'{"k2": "v2", "k1": "v1"}'
,其实我想说的是:
在客户端产生了一个字典,由于需要加密,所以成了这样的数据:b
'qwrasdfsdfsfa'
,怎么发呢?
直接发就行:
a = b
'qwrasdfsdfsfa'
r = requests.post(
'http://192.168.165.4:8000/show/testreport/'
,data=a)
然后在服务器端用request.body()获取数据然后解密就行。
python3-requests详解:https://www.cnblogs.com/ranxf/p/7808537.html