如何给http服务器发送post请求

如何给http服务器发送post请求,第1张

1、HTTP请求概述

在前面有一篇文章对HTTP协议有详细的描述,这里就不再过多的做说明,只是简单的作为这篇文章的引子。

HTTP协议又被称为超文本传输协议,它的的设计目的是保证客户机与服务器之间的通信。HTTP 的工作方式是客户端与服务器之间的请求-应答协议。在客户端和服务器之间进行请求-响应时,有两个最基本的请求方式:GET 和 POST。

其中,GET请求表示从指定的资源请求数据,POST请求表示向指定的资源提交要被处理的数据。

2、HTTP请求格式

在HTTP请求中,首先是请求行,注意这里的请求行一定要放在最前面;其次,是请求头,英文表示为header;然后会空一行,紧接着就可以是请求的具体内容了,一般称之为请求体,request-body。给出一个图示如下:

3、GET请求与POST请求对比

GET请求与POST请求有一些异同点,主要有以下几点问题:

(1)、GET请求和POST请求都是客户端与服务器之间交互,请求--应答模式的协议

(2)、GET请求是通过URL直接请求数据,数据信息可以在URL中直接看到,比如浏览器访问;而POST请求是放在请求头中的,我们是无法直接看到的;

(3)、GET提交有数据大小的限制,一般是不超过1024个字节,而这种说法也不完全准确,HTTP协议并没有设定URL字节长度的上限,而是浏

览器做了些处理,所以长度依据浏览器的不同有所不同;POST请求在HTTP协议中也没有做说明,一般来说是没有设置限制的,但是实际上浏览器也有默认

值。总体来说,少量的数据使用GET,大量的数据使用POST。

(4)、GET请求因为数据参数是暴露在URL中的,所以安全性比较低,比如密码是不能暴露的,就不能使用GET请求;POST请求中,请求参数信息是放在请求头的,所以安全性较高,可以使用。在实际中,涉及到登录操作的时候,尽量使用HTTPS请求,安全性更好。

下面给出一副图示,说明一下HTTP中GET与POST请求的差异:

4、使用步骤:

在Android中使用HTTP请求,主要步骤如下:

(1)、实例化一个HttpGet(或HttpPost)对象,将请求的URL地址通过构造方法传给HttpGet(或HttpPost)对象;

(2)、使用DefaultHttpClient类的execute方法发送GET或POST 请求,并返回HttpResponse对象;

(3)、通过HttpResponse接口的getEntity方法返回响应信息。

5、实例代码

给出一个在实际应用中的一个POST请求的代码片段:

[java] view plain copy print?

params = new LinkedList()

params.add(new BasicNameValuePair("param1", "Post方法"))

params.add(new BasicNameValuePair("param2", "第二个参数"))

try {

HttpPost post = new HttpPost(baseUrl)

post.setEntity(new UrlEncodedFormEntity(params, "utf-8"))//将参数填入POST Entity中

HttpResponse response = httpClient.execute(post)//执行POST方法

resCode = response.getStatusLine().getStatusCode())//获取响应码

result = EntityUtils.toString(response.getEntity(), "utf-8"))//获取响应内容

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

6、HTTP请求状态码意义

HTTP请求中,主要有这样几个类型:1XX:表示信息提示,2XX:表示成功,3XX:表示重定向,4XX:表示客户端请求错误,5XX:表示服务器错误。常见的几个HTTP请求状态码意义如下:

200 OK: 找到了该资源,并且一切正常。

304 NOT MODIFIED: 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。

401 UNAUTHORIZED: 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。

403 FORBIDDEN: 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。

404 NOT FOUND: 在指定的位置不存在所申请的资源。

505 NOT SUPPORTED:服务器不支持请求中所指明的HTTP版本

在浏览器中输入网址访问资源都是通过GET方式在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交。

HTTP 定义了与服务器交互的不同方法,最常用的有4种,Put(增),Delete(删),Post(改),Get(查),即增删改查:

1)Get, 它用于获取信息,注意,他只是获取、查询数据,也就是说它不会修改服务器上的数据,从这点来讲,它是数据安全的,而稍后会提到的Post它是可以修改数据的,所以这也是两者差别之一了。

2) Post,它是可以向服务器发送修改请求,从而修改服务器的,比方说,我们要在论坛上回贴、在博客上评论,这就要用到Post了,当然它也是可以仅仅获取数据的。

3)Delete 删除数据。可以通过Get/Post来实现。

4)Put,增加、放置数据,可以通过Get/Post来实现。

根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的 。

1.所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。(注意:这里安全的含义仅仅是指是非修改信息。)

根据HTTP规范,POST表示可能修改变服务器上的资源的请求 。继续引用上面的例子:还是新闻以网站为例,读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。

表现形式区别:

HTTP请求:在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。

两种提交方式的区别:

(1)GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据

因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变

(2)传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。

而在实际开发中存在的限制主要有:

GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

因此对于GET提交时,传输数据就会受到URL长度的限制。

POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/222722.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存