实现HTTP请求的方法有哪些
本篇文章为大家展示了实现HTTP请求的方法有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
一、HTTP的请求与响应
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。是客户端和服务器端之间数据传输的格式规范。
通常,由HTTP客户端发起一个请求,服务端一旦收到请求,向客户端返回一个相应(一个请求的发出,有且只有一个响应)。
(一)HTTP请求
请求报文格式如下:
请求行 - 请求头 - 实体内容
例如:
GET /webDemo/Hellow HTTP/1.1 //请求行Host: localhost:8080 //请求头Connection: keep-aliveAccept: text/htmlAccept-Encoding: gzip, deflate, sdch, brAccept-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:当浏览器客户端与服务器端建立连接后,可以在一次连接后,发送多次请求
请求头
常见的请求行:
Accept:text/html,image@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;@WebServlet("/Response")public class ModifyResponseInfo extends HttpServlet { @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的响应头 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); }
(四)编码问题
服务端和客户端可能存在着编码问题,当服务端和客户端的编码不同时,传输的数据就有可能因为编码问题而导致乱码。
手动解码
在获取的每个数据进行手工再次编码,这里是必须知道服务端的编码方式和客户端的编码方法。
name = new String(name.getBytes("iso-8859-1"),"utf-8");
设置参数查询码表
在获取数据之前,调用setCharacherEncoding方法设置指定编码格式。
该方法,只能对请求实体内容的编码起作用,所以只能对POST提交参数起作用。
request.setCharacherEncoding(“utf-8”);
修改服务器的配置文件
比如,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请求的方法有哪些,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341