整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Python发送POST请求

ttpbin:测试 HTTP 请求及响应的网站.http://httpbin.org

httpbin这个网站能测试 HTTP 请求和响应的各种信息,比如 cookie、ip、headers 和登录验证等,且支持

GET、POST 等多种方法,对 web 开发和测试很有帮助。

一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样:

请求行

请求报头

消息主体

HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。服务端通过是

根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析,也就

是说提交的数据格式要和Content-Type字段规定的一致。具体的编码方式包括:

application/x-www-form-urlencoded

最常见post提交数据的方式,以form表单形式提交数据。

application/json

以json串提交数据。

multipart/form-data

一般使用来上传文件。

以form形式发送post请求

Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post( )的

data 参数即可。

可以看到,请求头中的Content-Type字段已设置为application/x-www-form-urlencoded.

且 d = {'key1': 'value1', 'key2': 'value2'} 以form表单的形式提交到服务端,服务端返回的form字段即是

提交的数据。

以json形式发送post请求

可以将一json串传给requests.post()的data参数

以multipart形式发送post请求

Requests也支持以multipart形式发送post请求,只需将一文件传给requests.post()的 files 参数即可。

文本文件report.txt的内容只有一行:Hello world!,从请求的响应结果可以看到数据已上传到服务端中。

boundary 用于分割不同的字段 类似于查询字符串中的&。不是HTML产生的,可以自己指定。

对于学习python的学习路线,学习方法,系统学习规划有任何问题,可以关注我的头条号,私信给我”python“会自动回复python系统学习交流群,群里有学习路线以及详细的规划,我做web开发十年的时间,希望帮助新手少走弯路。

. 体系结构 万维网(WWW)服务是分布式的客户/服务器服务,客户使用浏览器能够得到服务器提供的服务,这种服务的提供是分布在许多网站中的,如下图所示:

图13-1 分布式的服务

每一个网站保存有一个或多个文档,叫做万维网页面。在图12-1所示的例子中,客户需要查看网站A的某些信息。浏览器用来读取万维网上的文档。它向网站A发送一个请求,这个请求包含了网站A和网站中万维网页面的地址,这个地址叫做统一资源定位符(URL)。网站A收到请求后,将指定的文档发送给这个客户。它用同样的方法与网站B通信。1. 客户(浏览器) 许多厂商提供商用浏览器,可以解释和显示万维网页面。每一个浏览器通常由3个部分组成:控制程序、客户程序及解释程序。控制程序从键盘或鼠标接收输入,使用客户程序访问要浏览的文档。在文档找到后,控制程序就使用解释程序(可以是HTML、Java或JavaScript等)中的一个,把文档显示在屏幕上。2. 服务器 万维网页面存储在服务器上。每当有客户请求到达时,对应的文档就发送给客户。为了提高效率,服务器通常在其高速缓存中存储被请求过的文档;对高速缓存进行访问要比磁盘快得多。通过多线程或多进程可使服务器的效率更加提高,服务器在同一时间可回答多个请求。3. 统一资源定位符(URL) 客户要访问万维网页面就需要这个页面地址。为了方便地访问文档,HTTP协议使用统一资源定位符(URL)。URL是Internet上指定信息的标准。URL由4部分组成:协议、主机、端口和路径,如下图所示:

图13-2 URL

协议:协议指定了用这个URL的客户/服务器程序。例如,HTTP协议、FTP协议和TELNET协议等。 主机:主机指明了信息所存放的地址,可以是逻辑地址也可以是相应的域名。存放万维网页面的计算机通常使用以字符"WWW"开始的域名,但这不是强制性的。 端口:端口指定了使用主机的某个端口,端口是可选的。如果包含了端口,那么端口就插入在主机和路径之间,和主机用冒号分隔开。 路径:路径指定了文件存放的位置。路径本身可以包含斜线,用于将目录与子目录和文件分隔开。二. 万维网文档 万维网文档可分为3类:静态文档、动态文档和活动文档。这种分类是基于文档内容被确定的时间。1. 静态文档 静态文档是固定内容的文档,它由服务器创建,并存储在服务器中。客户只能得到文档的一个副本。换言之,文件的内容是在文件被创建时就确定的,而不是在它被使用时。当然,在服务器中的内容是可以改变的,但用户不能改变它。当客户访问文档时,文档的一个副本就被发送出去。用户可以使用浏览程序显示这个文档,如下图所示:

图13-3 静态文档

2. 动态文档 动态文档是在浏览器请求该文档时才由万维网服务器创建出来。当请求到达时,万维网服务器就运行创建动态文档的应用程序。服务器返回这个程序或脚本的输出,把它作为对请求该文档的浏览器的响应。因为对每一个请求都创建出新的文档,因此每一个请求得到的动态文档的内容就会不同。3. 活动文档 对于许多应用,需要程序能够在客户端运行,这就叫做活动文档。当浏览器请求活动文档时,服务器就发送这个文档的一个副本或脚本。然后这个文档就在客户(浏览器)端运行。

三. HTTP协议简介四. HTTP报文格式

三. HTTP协议简介 HTTP(超文本传输协议)主要用于访问万维网上的数据。协议以普通文本、超文本、音频、视频等格式传输数据。之所以称为超文本协议,原因是在应用环境中,它可以快速的在文档之间跳转。HTTP在熟知端口80上使用TCP服务。四. HTTP报文格式 HTTP报文有两种一般的类型:请求和响应。这两种类型的报文格式几乎是相同的。报文格式如下图所示:

图13-4 HTTP报文格式

五. HTTP方法

五. HTTP方法 HTTP报文中的方法是客户端向服务器端发出的实际命令和请求。常用HTTP方法如下表所示:

表13-1 HTTP方法

六. HTTP状态码

六. HTTP状态码 在响应报文中,请求行被替换为状态行,由3位数字组成,表示请求是否被理解或被满足。HTTP协议的状态码如下表所示:

表13-2 HTTP状态码

七. 持久与非持久连接 1. 非持久连接 2. 持久连接

七. 持久与非持久连接 在版本1.1以前的HTTP协议默认是非持久连接的,而在版本1.1中,持久连接是默认的连接。1. 非持久连接 在非持久连接中,对每一个请求/响应都要建立一次TCP连接。非持久连接的步骤如下: ● 客户打开TCP连接,并发送请求。 ● 服务器发送响应,并关闭连接。 ● 客户读取数据,直到它遇到文件结束标记;然后它关闭连接。 使用非持久连接时,对于在不同文件中的N个不同图片的请求,连接必须打开和关闭N次。非持久连接策略给服务器造成了很大的开销,因为服务器需要N个不同的缓存,而每次打开连接时都要使用慢开始过程。2. 持久连接 HTTP版本1.1指明持久连接是默认的策略。在使用持久连接时,服务器在发送响应后,让连接继续为一些请求打开。服务器可以在客户发送关闭请求时等待或关闭这个连接。发送端通常在每一个响应中都发送数据长度。但是,有时发送端并不知道数据的长度(例如动态文档或活动文档),这时服务器就把长度不知道这件事通知客户,并在发送数据后关闭这个连接,这样客户就知道数据结束的地方已经到了。

八. HTTP代理服务器

八. HTTP代理服务器 HTTP支持代理服务器(proxy server)。代理服务器保留对最近请求的响应的副本。在有代理服务器的情况下,HTTP客户把请求发送给代理服务器。代理服务器检查它的高速缓存。如果在高速缓存中有这个响应,代理服务器就直接应答客户的请求;反之,如果在高速缓存中没有这个响应,代理服务器就把请求发送给相应的HTTP服务器,当HTTP服务器的响应到达代理服务器时,代理服务器将该响应转发给客户,同时将该响应存储到高速缓存中,以便以后为其它客户的请求使用。 代理服务器减少了原始服务器的负荷,减小了通信量,也减小了延时。但是,由于使用了代理服务器,客户必须配置成接入到代理服务器而不是那个目标服务器。

页面访问

各主机打开工具区的"拓扑验证工具",选择相应的网络结构,配置网卡后,进行拓扑验证,如果通过拓扑验证,关闭工具继续进行实验,如果没有通过,请检查网络连接。 本练习一人一组,现仅以主机A为例,其它主机参考主机A的操作。1. 主机A清空IE缓存。2. 主机A启动协议分析器开始捕获数据,并设置过滤条件(提取HTTP协议)。3. 主机A启动IE浏览器,在"地址"框中输入http://服务器的ip/experiment,并连接,服务器IP默认为172.16.0.253。4. 主机A停止捕获数据,分析捕获到的数据,并回答以下问题: ● 本练习使用HTTP协议的哪种方法?简述这种方法的作用。 ● 根据本练习的报文内容,填写下表。

表13-3 实验结果

● 参考"会话分析"视图显示结果,绘制此次访问过程的报文交互图(包括TCP协议)。 ● 简述TCP协议和HTTP协议之间的关系。

页面提交

本练习一人一组,现仅以主机A为例,其它主机参考主机A的操作。1. 主机A启动协议分析器开始捕获数据,并设置过滤条件(提取HTTP协议)。2. 主机A启动IE浏览器,在"地址"框中输入"http://服务器的ip/experiment/post.html",并连接,服务器IP默认为172.16.0.253。在返回页面中,填写"用户名"和"密码",点击[确定]按钮。3. 主机A停止捕获数据,分析捕获到的数据,并回答以下问题: ● 本练习的提交过程使用HTTP协议的哪种方法?简述这种方法的作用。 ● 此次通信分几个阶段?每个阶段完成什么工作? ● 参考"会话分析"视图显示结果,绘制此次提交过程的报文交互图(包括TCP协议)。

获取页面信息

本练习一人一组,现仅以主机A为例,其它主机参考主机A的操作。1. 主机A启动实验平台工具栏中的"TCP工具"。2. 主机A启动协议分析器开始捕获数据,并设置过滤条件(提取HTTP协议)。3. 主机A在"TCP工具"上,选中"客户端"单选框,设置"IP地址"为服务器IP(172.16.0.253);设置"端口"为80;单击[连接]按钮来和服务器建立连接。4. 主机A在"TCP工具"上,设置"发送数据(文本)"为以下内容: HEAD /experiment/ HTTP/1.1<CRLF> Host: 172.16.0.253<CRLF> <CRLF> 点击[发送]按钮。 (注:<CRLF>是回车换行) 点击[断开]按钮,断开TCP连接(由于不同http版本所遵循的规范不同,有些HTTP服务器不需要断开操作)。 5. 主机A在"TCP工具"上的"显示数据(文本)"中察看服务器返回信息。6. 主机A停止捕获数据,分析捕获到的数据。

较复杂的页面访问

本练习一人一组,现仅以主机A为例,其它主机参考主机A的操作。1. 本练习中要求各主机设置DNS服务器地址(DNS服务器的IP地址即主控中心平台的IP地址),其IP地址以172.16.0.253为例。2. 主机A使用"ipconfig /flushdns"命令清空DNS高速缓存。3. 主机A启动协议分析器开始捕获数据并设置过滤条件(提取DNS、HTTP协议)。4. 主机A启动IE浏览器,在地址框中输入http://JServer.NetLab/complexpage.htm。5. 主机A停止捕获数据,察看相关会话,分析捕获到的数据,并回答以下问题: ● 结合本次实验结果,简述浏览器是如何处理一个访问请求的。6. 恢复网络环境,将"首选DNS服务器"清空。

1. 一个主页是否只有一个连接?

1. 同时打开多个浏览器窗口并访问一个WEB站点的不同页面时,系统是根据什么把返回的页面正确地显示到相应窗口的?

1. 为什么HTTP不保持与客户端的TCP连接?

,一般现在流传的HTTP请求:GET和POST的比较是这样的:

GET和POST是HTTP的两个常用方法。

什么是HTTP?

超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议。

HTTP在客户端和服务器之间以request-responseprotocol(请求-回复协议)工作。

GET- 从指定的服务器中获取数据

POST- 提交数据给指定的服务器处理

GET方法:

使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器:

/test/demo_form.jsp?name1=value1&name2=value2

特点:

· GET请求能够被缓存

· GET请求会保存在浏览器的浏览记录中

· 以GET请求的URL能够保存为浏览器书签

· GET请求有长度限制

· GET请求主要用以获取数据

POST方法:

使用POST方法时,查询字符串在POST信息中单独存在,和HTTP请求一起发送到服务器:

POST/test/demo_form.jsp HTTP/1.1

Host:w3schools.com

name1=value1&name2=value2

特点:

· POST请求不能被缓存下来

· POST请求不会保存在浏览器浏览记录中

· 以POST请求的URL无法保存为浏览器书签

· POST请求没有长度限制

GET和POST的区别:

其他HTTP请求方式

二,本质上,这些并不是HTTP的GET和POST两者请求的区别,这些区别是建立在HTML标准对于HTTP协议的用法的约定之上的。

1. GET和POST与数据如何传递没有关系

GET和POST是由HTTP协议定义的。在HTTP协议中,Method和Data(URL, Body, Header)是正交的两个概念,也就是说,使用哪个Method与应用层的数据如何传输是没有相互关系的。

HTTP没有要求,如果Method是POST数据就要放在BODY中。也没有要求,如果Method是GET,数据(参数)就一定要放在URL中而不能放在BODY中。

那么,网上流传甚广的这个说法是从何而来的呢?我在HTML标准中,找到了相似的描述。这和网上流传的说法一致。但是这只是HTML标准对HTTP协议的用法的约定。怎么能当成GET和POST的区别呢?

而且,现代的Web Server都是支持GET中包含BODY这样的请求。虽然这种请求不可能从浏览器发出,但是现在的Web Server又不是只给浏览器用,已经完全地超出了HTML服务器的范畴了。

2. HTTP协议对GET和POST都没有对长度的限制

HTTP协议明确地指出了,HTTP头和Body都没有长度的要求。而对于URL长度上的限制,有两方面的原因造成:

1. 浏览器。据说早期的浏览器会对URL长度做限制。据说IE对URL长度会限制在2048个字符内(流传很广,而且无数同事都表示认同)。但我自己试了一下,我构造了90K的URL通过IE9访问live.com,是正常的。网上的东西,哪怕是Wikipedia上的,也不能信。

2. 服务器。URL长了,对服务器处理也是一种负担。原本一个会话就没有多少数据,现在如果有人恶意地构造几个几M大小的URL,并不停地访问你的服务器。服务器的最大并发数显然会下降。另一种攻击方式是,把告诉服务器Content-Length是一个很大的数,然后只给服务器发一点儿数据,嘿嘿,服务器你就傻等着去吧。哪怕你有超时设置,这种故意的次次访问超时也能让服务器吃不了兜着走。有鉴于此,多数服务器出于安全啦、稳定啦方面的考虑,会给URL长度加限制。但是这个限制是针对所有HTTP请求的,与GET、POST没有关系。