【爬虫】1.4 POST 方法向网站发送数据

1. 客户端 POST 发送数据


采用 POST 方法访问网站时,客户端向服务器发送表单数据,表单数据的组织方式与 GET 方法的参数列表十分相似,结构如下:

"名称1=值1&名称2=值2……"

多个数据之间用 “&” 符号隔开,如果参数包含汉字,那么必须使用 urllib.parse.quote 对参数进行编码。例如:

province=urllib.parse.quote("广东")
city=urllib.parse.quote("深圳")
data="province="+province+"&city="+city
data=data.encode()  # string按UTF-8编码-->二进制数据
html=urllib.request.urlopen("http://127.0.0.1:50000", data=data)

POST方法与GET方法最大的不同

  • 安全性问题:GET 的 参数显示在地址栏的后面,Post 不会,

  • POST 的数据放在urlopen 函数的 data 参数中,

  • 而且这个参数必须是二进制数据;

  • 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到,Post 方式,数据放置在html header 内提交;

  • Get方式提交的数据最多只能有1024字节,Post 则没有限制。

编写客户端client.py程序如下:

importurllib.parse
importurllib.request
​
url="http://127.0.0.1:5000"
try:province=urllib.parse.quote("广东")city=urllib.parse.quote("深圳")data="province="+province+"&city="+citydata=data.encode()  # string按UTF-8编码-->二进制数据html=urllib.request.urlopen("http://127.0.0.1:50000", data=data)html=html.read()html=html.decode()  # 二进制数据——>stringprint(html)
exceptExceptionaserr:print(err)
​

2. 服务器获取 POST 的数据


服务器用 Flask 中的 request 对象form 来存储 GET 的参数,用 get 方法来获取参数,即用flask.request.form.get(参数) 来获取参数的值。例如:如下…语句可以获取 GET 传递的参数 province 与 city 的值。

province=flask.request.form.get("province")
city=flask.request.form.get("city")

编写服务器程序server.py 如下:

importflask
​
app=flask.Flask(__name__)
​
​
@app.route("/", methods=["POST"])  # 表明这个函数接收POST请求。
# @app.route("/", methods=["GET", "POST"]) 这个函数既可以接收GET请求,也可以接收POST请求。
# 默认时只接收GET请求,要接收POST请求就必须明确指明
​
defindex():try:province=flask.request.form.get("province") if"province"inflask.request.formelse""city=flask.request.form.get("city") if"city"inflask.request.formelse""returnprovince+","+cityexceptExceptionaserr:returnstr(err)
​
​
if__name__=="__main__":app.run()
​

先运行 server.py 建立Web 网站,再运行 client.py,可以看到client.py结果如下:


3. GET 与 POST 的混合使用


实际上,在应用中客户端同时使用GET 与 FOST 向服务器发送数据,一般 GET 的数据放在地址栏的后面,参数简单,数据量少,而POST 的数据是表单数据,数据量大

例如,客户端向服务器发送一个城市的简介,服务器接收后返回收到的信息。

解决如下:

我们把省份province与城市city的名称放在URL地址栏后面采用 GET 方式发送给服务器,

然后把城市的简介POST 方法发送给服务器。

客户端程序client.py如下:

importurllib.parse
importurllib.request
​
url="http://127.0.0.1:5000"
note="深圳依山傍海,气候宜人,实在是适合人类居住的绝佳地。" \"这里四季如春,干净整洁,比邻香港,拥有着丰富的自然景观和人文气息。" \"匆匆过客注意到的也许只有它的时尚繁华,忙碌的暂居者也可能对它有着不识城市真面目之感。" \"只有世代在此生活的老深圳人,才明白它从贫穷走向富饶经历了怎样的艰辛。 "
try:province=urllib.parse.quote("广东")city=urllib.parse.quote("深圳")note="note="+urllib.parse.quote(note)param="province="+province+"&city="+cityhtml=urllib.request.urlopen("http://127.0.0.1:5000?"+param, data=note.encode())html=html.read().decode()print(html)
exceptExceptionaserr:print(err)
​

服务器程序server.py如下:

importflask
​
app=flask.Flask(__name__)
​
​
@app.route("/", methods=["GET", "POST"])
defindex():try:province=flask.request.args.get("province") if"province"inflask.request.argselse""city=flask.request.args.get("city") if"city"inflask.request.argselse""note=flask.request.form.get("note") if"note"inflask.request.formelse""returnprovince+","+city+"\n"+noteexceptExceptionaserr:returnstr(err)
​
​
if__name__=="__main__":app.run()
​

先运行服务器程序建立Web网站,再运行客户端程序,可以看到服务器返回的结果如下:


服务器接收 GET 的参数采用 flask.request.args.get(参数),与接收 POST 参数的方法 flask.request.form.get(参数) 是不同的,实际上可以把它们统一成 flask.request.values.get(参数)。采取这个方法,可以获 GET 的参数,也可以获取 POST 的参数,即:

服务器server.py程序改进如下:

importflask
​
app=flask.Flask(__name__)
​
​
@app.route("/", methods=["GET", "POST"])
defindex():try:province=flask.request.values.get("province") if"province"inflask.request.valueselse""city=flask.request.values.get("city") if"city"inflask.request.valueselse""note=flask.request.values.get("note") if"note"inflask.request.valueselse""returnprovince+","+city+"\n"+noteexceptExceptionaserr:returnstr(err)
​
​
if__name__=="__main__":app.run()
​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/67703.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何快速爬取网页数据(干货)

摘要:对于程序员或开发人员来说,拥有编程能力使得他们构建一个网页数据爬取程序,非常的容易并且有趣。但是对于大多数没有任何编程知识的人来说,最好使用一些网络爬虫软件从指定网页获取特定内容。 网页数据爬取是指从网站上提取特…

服务器数据抓包(原来微信图片真的可以抓包看的)

在我们开发的时候,有时需要抓包,看一下服务器的返回数据,来校验自己请求的参数和返回的参数是否正确。当然,有时候也想抓一下别人的数据看下,比如微信。当然,如果别人的数据加密了,那你就蛋疼了…

倒计时30天!2023世界人工智能大会八大亮点抢先看

2023世界人工智能大会将于7月6-8日在上海举办,以**“智联世界 生成未来”**为主题,聚焦通用人工智能发展,营造良好创新生态,拥抱智能新时代,共话产业新未来。大会将继续发挥“科技风向标、应用展示台、产业加速器、治理…

MANA OASIS加持,毫末算力极致优化,训练成本降低100倍

2023年1月5日,第七届HAOMO AI DAY在北京举办。正值岁末年初,中国自动驾驶届开年盛会精彩来袭。本届AI DAY上,毫末分享了2022年三大战役稳健收官成果,展望2023年全球自动驾驶发展趋势,并发布毫末技术、产品最新成果。 &…

张俊林:由ChatGPT反思大语言模型(LLM)的技术精要(2)

原文:张俊林:由ChatGPT反思大语言模型(LLM)的技术精要(2) 02 学习者:从无尽数据到海量知识 从目前研究结果看,Transformer是足够强大的特征抽取器,尚不需要做特别的改进…

【初探人工智能ChatGPT】2、雏形开始长成

【初探人工智能ChatGPT】2、雏形开始长成 【初探人工智能ChatGPT】2、雏形开始长成安装Flask封装Web接口雏形设置接收参数功能验证聊天写代码代码补全生成图片 写在后面 笔者初次接触人工智能领域,文章中错误的地方还望各位大佬指正! 【初探人工智能Chat…

马斯克要求 Twitter 程序员写周报,具体到代码行数!

来源:InfoQ 11 月 24 日,据 Business Insider 报道,推特内部邮件显示,该公司要求技术类员工必须每周发邮件给 CEO 埃隆马斯克(Elon Musk),介绍自己本周的所有工作,以此实现“快速创新…

马斯克的推特“大清洗”:高管、员工、研究学者、高仿号,以及前女友

大数据文摘出品 Let that sink in。 10月24日,马斯克就真的抱着一个水槽,走进了Twitter的总部大楼。 磨磨蹭蹭半年,马斯克终于完成了对Twitter的收购,如愿接过Twitter的指挥权杖。 马斯克拿下推特之后,各种新闻几乎布满…

马斯克在推特回应推特起诉:真讽刺,我笑了

万博 发自 凹非寺量子位 | 公众号 QbitAI 马斯克和推特之间的“连续剧”,又更新了一集: 《推特正式起诉马斯克》。 并且在诉状中,推特还细数了马斯克决意收购前后的种种恶行。 核心态度是: 我方纯属无辜,马斯克必须按照…

6月无代码资讯|OutSystems与微软合作,将生成式AI整合在低代码产品;首个自然语言开发框架PromptAppGPT发布

一、TOP3 大事件 1、用ChatGPT开发代码!OutSystems与微软合作,增强低代码开发 6月22日,全球低代码领导者OutSystems在官网宣布与微软达成深度技术合作,将生成式AI全面整合在低代码产品矩阵中。 据悉,OutSystems通过…

使用CNN+LSTM进行脑电情绪识别

写了一份适合刚入门脑电情绪识别的一个可用于练手的代码讲解。 首先再进行用脑电信号进行情绪识别时会对数据进行一个处理,比如计算出微分熵,功率谱图等。 在这里我们首先采用计算出微分熵DE。 微分熵 微分熵是香农信息熵在连续变量上的推广形式&…

神经元激活函数

神经元激活函数 激活函数(Activation functions),将非线性特性引入到网络中。如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。 引入激活函数是为了增加神经…

独家 | 人工神经网络中发现了人类大脑拥有的多模态神经元(附链接)

作者:Gabriel Goh, Chelsea Voss, Daniela Amodei, Shan Carter, Michael Petrov, Justin Jay Wang, Nick Cammarata, and Chris Olah 翻译:欧阳锦 校对:王可汗本文约4000字,建议阅读12分钟本文探讨了OpenAI在CLIP模型中发现人类大…

神经网络(三)—— 神经元多输出

本系列为慕课网《深度学习之神经网络(CNN/RNN/GAN)算法原理实战》视频笔记,希望自己能通过分享笔记的形式更好的掌握该部分内容。 往期回顾: 神经网络(一)—— 机器学习、深度学习简介 神经网络(二)—— 神…

3D U-Net脑胶质瘤分割BraTs + Pytorch实现

原论文地址: 连接 一、网络模型的分析和对比 原始2D-Unet网络模型 我的2D-Unet网络模型 1、和原来的2D-Unet网络不同的是,我输入通道为4,我这里应该改为4个通道,对应四个模态图像,而输出通道为3,我对应的是三个嵌套子区域标签(WT、TC、ET) 2、另外,最大不同的是我的3X3卷积…

深度学习(一)——MP神经元模型, BP算法, 神经元激活函数, Dropout

https://antkillerfarm.github.io/ 前言 神经网络本质上不是什么新东西。十年前,我还在上学的时候,就接触过皮毛。然而那时这玩意更多的还是学术界的屠龙之术,工业界几乎没有涉及。 及至近日重新拾起,方才发现,这十…

单个人工神经元模型示意图,人体神经元模型制作

人工神经元的基本构成 人脑的神经元模型如图8.6所示。图中一个神经元由细胞核、一个轴突、多个树突、突触组成。生物电信号从树突传入,经过细胞核处理,从轴突输出一个电脉冲信号。 神经元通过树突与轴突之间的突触与其他神经元相连构成一个复杂的大规模…

神经元的细胞体内有什么,神经元的细胞体在哪里

神经元细胞体位于哪里? 谷歌人工智能写作项目:神经网络伪原创 你知道神经元在我们身体的哪个部位吗? 神经元的基本结构包括细胞体和突起.神经元的突起一般包括一条长而分枝少的轴突和数条 短而呈树状分枝的树突.轴突以及套在外面的髓鞘,叫做神经纤维.…

03 神经元多输入

神经元多输入 上一篇博客介绍了二分类的逻辑回归模型。如果我们想要多分类的逻辑回归模型,我们该怎么做呢? 很显然,我们在只有一个神经元的时候可以做二分类的问题。如果我们想要多分类的话,直接加神经元的个数就好了,…

人脑部神经网络分布特点,人脑部神经网络分布图

人的大脑的怎么分配的 大脑(Brain)包括左、右两个半球及连接两个半球的中间部分,即第三脑室前端的终板。大脑半球被覆灰质,称大脑皮质,其深方为白质,称为髓质。髓质内的灰质核团为基底神经节。在大脑两半球间由巨束纤维—相连。 …