温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

实现HTTP请求的方法有哪些

发布时间:2020-11-26 17:46:44 来源:亿速云 阅读:347 作者:Leah 栏目:编程语言

本篇文章为大家展示了实现HTTP请求的方法有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、HTTP的请求与响应

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。是客户端和服务器端之间数据传输的格式规范。

通常,由HTTP客户端发起一个请求,服务端一旦收到请求,向客户端返回一个相应(一个请求的发出,有且只有一个响应)。

(一)HTTP请求

请求报文格式如下:

请求行 - 请求头 - 实体内容

例如:

GET /webDemo/Hellow HTTP/1.1  //请求行 Host: localhost:8080      //请求头 Connection: keep-alive Accept: text/html Accept-Encoding: gzip, deflate, sdch, br Accept-Language: zh-CN,zh;q=0.8                 //空行                 //实体内容

1、请求行

请求行的格式为

GET /webDemo/Hellow HTTP/1.1

请求方式 请求资源 http协议版本

(1)请求方式

请求方法有:

1) GET 请求指定的页面信息,并返回实体主体。
2) HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3) POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4) PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5) DELETE 请求服务器删除指定的页面。
6) CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7) OPTIONS 允许客户端查看服务器的性能。
8) TRACE 回显服务器收到的请求,主要用于测试或诊断。
常用的请求方式主要是GET和POST(通常用于表单的提交),浏览器直接访问的请求,默认提交方式为GET。

GET方法

提交的表单数据会在请求行的URI的后面。(以问号开头,跟随者键值对,以&连接)提交的数据大小有限制,不能超过1KB。不适合提交敏感数据。

POST方法

表单提交的数据会包含在实体内容当中。

(2)请求资源

该请求资源为Request-URI是一个统一资源标识符(Uniform Resource Identifier)是一个用于标识某一互联网资源名称的字符串。(本地,局域,互联网)

(3)HTTP协议版本

http 1.0:当浏览器客户端与服务器端建立连接后,发送一次请求后,就关闭连接
http 1.1:当浏览器客户端与服务器端建立连接后,可以在一次连接后,发送多次请求

2、请求头

常见的请求行:
Accept:text/html,image/*
请求报头域用于指定客户端接受哪些类型的信息

Accept-Charset: ISO-8859-1
求资源主机接受的编码格式

Accept-Encoding: gzip,compress
求资源主机接受的数据压缩格式

Accept-Language: en-us,zh-
求资源主机接受的语言

Host: localhost:8080
(必须的)主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的

User-Agent:
求资源主机浏览器类型

Connection:
求资源主机跟服务器连接状态
Connection: close 会发送请求后,自动断开连接
Connection: Keep-Alive 会发送请求后,依然保持连接

Date
求资源主机发出请求的时间

(二)HTTP响应

应答报文格式如下:
响应行 - 响应头 - 实体内容

HTTP/1.1 200 OK       //响应行 Server: Apache-Coyote/1.1  //相应头 Content-Length: 0 Date: Thu, 18 May 2017 13:21:23 GMT               //空行               //实体内容

HTTP响应与请求类似,主要了解的是其响应行的状态代码。

状态码:

100-199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200-299 表示成功接收请求并已完成真个处理过程,常用200
300-399 为完成请求,客户需进一步细化请求
400-499 客户端的请求有错误,常用404
500-599 服务器出现错误,常用500

常见的状态码:

200 表示请求处理完成并完美返回
302 表示请求需要进一细化
404 表示客户端访问的资源找不到
500 表示服务端出现问题

二、HttpServletRequest和HttpServletResponse对象获取HTTP响应和请求

(一)HttpServletRequest

//HttpServletRequest对象的常见方法 //请求行:   request.getMethod(); //获取请求的提交方式   request.getRequestURI(); //获取请求的URI   request.getProtocol(); //获取请求的协议 //请求头:   request.getHeader();  //获取请求头的强求值   request.getHeaderName(); //获取请求头的所有名称 //实体内容:   request.getInputStream(); //获取实体内容的输入流

例如,我们可以搭建一个tomcat servlet服务端,来获取用客户端的请求信息。

package sun; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /**  * Servlet implementation class Hellow  */ @WebServlet("/Hellow") public class GetRequestInfo extends HttpServlet {   @Override   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     //创建一个字符串来存储请求信息     StringBuffer req = new StringBuffer();     //获取请求行     //获取请求方法,URI,HTTP版本      req.append(request.getMethod()+" "+request.getRequestURI()+" "+request.getProtocol()+"\n");     //获取请求头     //获取所有请求头     Enumeration<?> headerName = request.getHeaderNames();     while(headerName.hasMoreElements()){       String header= (String)headerName.nextElement();       req.append(header+": ");       //获取指定请求头的值       Enumeration<?> headerValue = request.getHeaders(header);       while(headerValue.hasMoreElements()){         req.append((String)headerValue.nextElement()+";");       }       req.append("\n");     }     req.append("\n");     //获取实体内容     InputStream input = request.getInputStream();     byte[] buffer = new byte[1024];     int len = 0;     while((len=input.read(buffer))!=-1){       String str = new String(buffer,0,len);       req.append(str);     }     //输出请求信息     System.out.println(req);   } }

(二)HttpServletResponse

通过例子,来看通过修改响应信息来实现一些业务逻辑。

package sun; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /**  * Servlet implementation class Response  */ @WebServlet("/Response") public class ModifyResponseInfo extends HttpServlet {   /**    * Description:    * 通过HttpServletResponse对象,改变响应信息    * */   @Override   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {     //1、修改响应行     resp.setStatus(404);     //resp.sendError(404);     //2、修改响应头     resp.setHeader("Server","JBoss");     //3、修改实体内容     //发送字符类型的实体内容     resp.getWriter().write("response");     //发送字节类型的实体内容     resp.getOutputStream().write("response".getBytes());     //4、通过修改响应头,来请求重定向     //发送要给302状态码,location的响应头     /*     当浏览器认识到302状态码的时候,会再次自动向服务器发出一个请求,请求的地址就是location的value值      请求重定向,一共向服务器发出2次请求      */     resp.setStatus(302);     resp.setHeader("location","/webDemo/index.html");     //也可以直接调用sendRedirect方法直接重定向     //resp.sendRedirect("/webDemo/adv.html");     //5、通过修改响应头,来实现定时刷新页面     //一秒后刷新页面     resp.setHeader("refresh","1");     //也可以定时重定向页面     //resp.setHeader("refresh","1;url=/webDemo/index.html");     //6、通过修改响应头,来修改服务端和客户端的传输的数据类型     //resp.setHeader("content-type","text/html")     //也可以直接调用setContentType方法直接设置     //在web.xml文件中找到对应的数据类型写法     resp.setContentType("text/html");   } }

(三)获取请求参数

由于GET和POST提交参数的位置不同(POST方法: 表单提交的数据会包含在实体内容当中;GET方法: 提交的表单数据会在请求行的URI的后面。),因此GET和POST方法获取请求参数的方法也不样。

//获取GET方式参数: request.getQueryString(); //获取POST方式参数: request.getInputStream();

但是这样获得的参数,需要进行字符串的拆分以后才能使用。因此,Tomcat自动将GET和POST的请求参数封装在HttpServletRequest对象当中。可以调用以下方法获得:

  //根据指定名字来获取参数值     request.getParameter("name");     request.getParameter("password");     //获取所有参数名字     Enumeration<String> params = request.getParameterNames();     while(params.hasMoreElements()){       String param = params.nextElement();       String value = request.getParameter(param);     }

(四)编码问题

服务端和客户端可能存在着编码问题,当服务端和客户端的编码不同时,传输的数据就有可能因为编码问题而导致乱码。

1、手动解码

在获取的每个数据进行手工再次编码,这里是必须知道服务端的编码方式和客户端的编码方法。

name = new String(name.getBytes("iso-8859-1"),"utf-8");

2、设置参数查询码表

在获取数据之前,调用setCharacherEncoding方法设置指定编码格式。

该方法,只能对请求实体内容的编码起作用,所以只能对POST提交参数起作用。

request.setCharacherEncoding(“utf-8”);

3、修改服务器的配置文件

比如,tomcat服务器当中,修改server.xml配置文件

<!-- A "Connector" represents an endpoint by which requests are received      and responses are returned. Documentation at :      Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)      Java AJP Connector: /docs/config/ajp.html      APR (HTTP/AJP) Connector: /docs/apr.html      Define a non-SSL/TLS HTTP/1.1 Connector on port 8080   -->   <!--在这里,加上属性URIEncoding,及指定编码值-->   <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>

上述内容就是实现HTTP请求的方法有哪些,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI