目录
访问网站的方法有get方法和post方法,今天学习了另一种方法post方法。
POST方法向网站发送数据
1、客户端post发送数据
post方法访问网站时客户端向服务器发送表单数据,表单数据的组织方式与get方式的参数列表十分相似,数据采用"名称1=值1&名称2=值2......"的方式,多个数据之间用"&"符号隔开。如果参数值包含汉字,那我们就必须使用urllib.parse.quote对参数进行编码。
post方法与get方法最大的不同是get的参数放在地址栏的后面,而post的数据放在urlopen函数的data参数中,而且这个参数值必须是二进制数据。把data字符串按utf-8的编码转为二进制数据用data=data.encode()。
编写客户端client.py
import urllib.request
import urllib.parse
url="http://127.0.0.1:5000"
p=urllib.parse.quote("湖南")
c=urllib.parse.quote("长沙")
n=urllib.parse.quote("大家来长沙玩呀")
data="province="+p+"&city="+c+"¬e="+n
resp=urllib.request.urlopen(url+"?",data=data.encode())
data=resp.read()
html=data.decode()
print(html)
2、服务器获取post的数据
服务器用flask中的request对象的form来存储get的参数,用get方法来获取参数。
这里要在路由加上methods=["POST"],如果没有加上,会默认只接受get请求。
编写服务器server.py
import flask
app=flask. Flask(__name__)
@app.route("/",methods=["POST"])
def index():
p=flask.request.form.get("province")
c=flask.request.form.get("city")
n=flask.request.form.get("note")
print(p)
print(c)
print(n)
return p+"\n"+c+"\n"+n
app.run()
先运行server.py再运行client.py,可以看到两边的结果分别为
3、get和post的混合使用
在应用中客户端客户同时使用get和post向服务器发送数据,一般get的数据放在地址栏后面,参数简单,数据量少,而post的数据是表单数据,数据量大。
编写客户端client.py
import urllib.request
import urllib.parse
url="http://127.0.0.1:5000"
p=urllib.parse.quote("湖南")
c=urllib.parse.quote("长沙")
n=urllib.parse.quote("长沙市地势起伏较大,地形以山地、岗地、平原为主,湘江穿市区而过。长沙市属亚热带季风气候,四季分明,春温变化大,夏初雨水多,伏秋高温久,冬季严寒少。")
pc="province="+p+"&city="+c
data="note="+n
resp=urllib.request.urlopen(url+"?"+pc,data=data.encode())
data=resp.read()
html=data.decode()
print(html)
编写服务器server.py
import flask
app=flask. Flask(__name__)
@app.route("/",methods=["GET","POST"])
def index():
p=flask.request.values.get("province")
c=flask.request.values.get("city")
n=flask.request.form.get("note")
print(p)
print(c)
print(n)
return p+"\n"+c+"\n"+n
app.run()
先运行服务器server.py再运行客户端client.py,得到以下结果
标签:get,flask,request,爬虫,urllib,学习,post,data From: https://blog.csdn.net/2301_81172725/article/details/143359453