Java 发起http GET POST请求实例
发布日期:2021-06-30 17:38:18
浏览次数:3
分类:技术文章
本文共 5708 字,大约阅读时间需要 19 分钟。
一,简介
经常看见大家用HttpClient发送http请求,其实Java也自带了相关类库,本篇简单做个介绍,主要是给个示例。
二,环境搭建
首先搭建一个Java Web项目JavaNetDemo,并写一个Servlet用于接受Http请求并返回结果用于测试,代码如下:
package http;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 用来测试是否调用到了LoginServlet * @author 猫哥 * @date 2017.4.27 */@WebServlet(urlPatterns="/LoginServlet")public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); request.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("A Servlet "); out.println(" "); out.println("doGet方法调用了"); String name=request.getParameter("name"); out.println("name:"+this.parseGet(name)); String password=request.getParameter("password"); out.println("password:"+this.parseGet(password)); out.println(" "); out.println(""); out.flush(); out.close(); } /** * * @param input * @return * @throws UnsupportedEncodingException */ private String parseGet(String input) throws UnsupportedEncodingException{ input = URLEncoder.encode(input, "iso8859-1"); input=URLDecoder.decode(input, "utf-8"); return input; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); request.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("A Servlet "); out.println(" "); out.println("doPost方法调用了"); String name=request.getParameter("name"); out.println("name:"+name); String password=request.getParameter("password"); out.println("name:"+password); out.println(" "); out.println(""); out.flush(); out.close(); }}
三,Http请求类
注意该类的两个静态方法分别给出了通过代码发送http GET和POST请求的具体例子,发送请求时的参数封装为QueryParams类用于保存参数。
package http;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import java.net.URL;import java.net.URLConnection;/** * Http请求发起类 * @author 猫哥 * @date 2017.4.27 */public class HttpSender { /** * 测试入口 * @throws UnsupportedEncodingException */ public static void main(String[] args) throws UnsupportedEncodingException{ String getResult=HttpSender.sendPostRequest(); System.out.println(getResult); } /** * 发起http GET请求 * @return 请求的返回值 */ public static String sendGetRequest(){ StringBuilder sb=new StringBuilder(); QueryParams suffix=new QueryParams(); suffix.add("name", "猫哥"); suffix.add("password","1234"); try { URL url=new URL("http://127.0.0.1:8080/JavaNetDemo/LoginServlet?x=0"+suffix.toString()); InputStream in=new BufferedInputStream(url.openStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8")); String line; while((line=reader.readLine())!=null){ sb.append(line); } } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } public static String sendPostRequest(){ StringBuilder sb=new StringBuilder(); QueryParams suffix=new QueryParams(); suffix.add("name", "猫哥"); suffix.add("password","1234"); try { //打开post通道 URL url=new URL("http://127.0.0.1:8080/JavaNetDemo/LoginServlet"); URLConnection urlCon=url.openConnection(); urlCon.setDoOutput(true); //写参数 OutputStreamWriter out=new OutputStreamWriter(urlCon.getOutputStream(),"UTF-8"); out.write(suffix.toString()); out.flush(); out.close(); //读返回 BufferedReader reader = new BufferedReader(new InputStreamReader(urlCon.getInputStream(),"UTF-8")); String line; while((line=reader.readLine())!=null){ sb.append(line); } } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } return sb.toString(); }}
四,QueryParams参数类
package http;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;/** * 参数封装 * @author 猫哥 * @date 2017.4.27 */public class QueryParams { /** * 内容 */ private StringBuilder suffix=new StringBuilder(); /** * 编码 */ private String code; public QueryParams(){ this.code="UTF-8"; } public QueryParams(String code){ this.code=code; } public void add(String name,String value){ suffix.append("&"); try { suffix.append(URLEncoder.encode(name,code)); suffix.append("="); suffix.append(URLEncoder.encode(value,code)); } catch (UnsupportedEncodingException e) { //记录下日志 } } @Override public String toString(){ return suffix.toString(); }}
转载地址:https://lemonstone.blog.csdn.net/article/details/82763160 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年05月03日 20时43分58秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MyBatisPlus简单入门(SpringBoot)
2019-04-30
攻防世界web进阶区NewsCenter详解
2019-04-30
攻防世界web进阶PHP2详解
2019-04-30
如何解决词达人问题(新)
2019-04-30
攻防世界web进阶区surpersqli详解
2019-04-30
攻防世界web进阶区easytornado详解
2019-04-30
攻防世界web进阶区web2详解
2019-04-30
xss-labs详解(上)1-10
2019-04-30
xss-labs详解(下)11-20
2019-04-30
攻防世界web进阶区ics-05详解
2019-04-30
攻防世界web进阶区FlatScience详解
2019-04-30
攻防世界web进阶区ics-04详解
2019-04-30
攻防世界web进阶区Cat详解
2019-04-30
攻防世界web进阶区bug详解
2019-04-30
攻防世界web进阶区ics-07详解
2019-04-30
攻防世界web进阶区unfinish详解
2019-04-30
攻防世界web进阶区i-got-id-200超详解
2019-04-30
sql注入总结学习
2019-04-30
leetcode46 全排列
2019-04-30
leetcode121 买卖股票的最佳时机
2019-04-30