如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求。

Java有原生的API可用于发送HTTP请求,即java.net.URL、java.net.URLConnection,这些API很好用、很常用,但不够简便;
所以,也流行有许多Java HTTP请求的framework,如,Apache的HttpClient。
目前项目主要用到Java原生的方式,所以,这里主要介绍此方式。
运用原生Java Api发送简单的Get请求、Post请求
HTTP请求粗分为两种,一种是GET请求,一种是POST请求。使用Java发送这两种请求的代码大同小异,只是一些参数设置的不同。步骤如下:
1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)
2.设置请求的参数
3.发送请求
4.以输入流的形式获取返回内容
5.关闭输入流
简单的Get请求示例如下:
package com.bjpowernode.httprequestdemo;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class HttpGetRequest {
/**
* Main
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
System.out.println(doGet());
}
/**
* Get Request
* @return
* @throws Exception
*/
public static String doGet() throws Exception {
URL localURL = new URL("http://localhost:8080/OneHttpServer/");
URLConnection connection = localURL.openConnection();
HttpURLConnection httpURLConnection = (HttpURLConnection)connection;
httpURLConnection.setRequestProperty("Accept-Charset", "utf-8");
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
StringBuffer resultBuffer = new StringBuffer();
String tempLine = null;
if (httpURLConnection.getResponseCode() >= 300) {
throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
}
try {
inputStream = httpURLConnection.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);
while ((tempLine = reader.readLine()) != null) {
resultBuffer.append(tempLine);
}
} finally {
if (reader != null) {
reader.close();
}
if (inputStreamReader != null) {
inputStreamReader.close();
}
if (inputStream != null) {
inputStream.close();
}
}
return resultBuffer.toString();
}
}
简单的Post请求示例如下:
package com.bjpowernode.httprequestdemo;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class HttpPostRequest {
/**
* Main
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
System.out.println(doPost());
}
/**
* Post Request
* @return
* @throws Exception
*/
public static String doPost() throws Exception {
String parameterData = "username=nickhuang&blog=http://www.cnblogs.com/nick-huang/";
URL localURL = new URL("http://localhost:8080/OneHttpServer/");
URLConnection connection = localURL.openConnection();
HttpURLConnection httpURLConnection = (HttpURLConnection)connection;
httpURLConnection.setDoOutput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Accept-Charset", "utf-8");
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpURLConnection.setRequestProperty("Content-Length", String.valueOf(parameterData.length()));
OutputStream outputStream = null;
OutputStreamWriter outputStreamWriter = null;
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
StringBuffer resultBuffer = new StringBuffer();
String tempLine = null;
try {
outputStream = httpURLConnection.getOutputStream();
outputStreamWriter = new OutputStreamWriter(outputStream);
outputStreamWriter.write(parameterData.toString());
outputStreamWriter.flush();
if (httpURLConnection.getResponseCode() >= 300) {
throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
}
inputStream = httpURLConnection.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);
while ((tempLine = reader.readLine()) != null) {
resultBuffer.append(tempLine);
}
} finally {
if (outputStreamWriter != null) {
outputStreamWriter.close();
}
if (outputStream != null) {
outputStream.close();
}
if (reader != null) {
reader.close();
}
if (inputStreamReader != null) {
inputStreamReader.close();
}
if (inputStream != null) {
inputStream.close();
}
}
return resultBuffer.toString();
}
}
简单封装
如果项目中有多处地方使用HTTP请求,我们适当对其进行封装,
以下简单封装成HttpRequestor,以便使用:
package com.bjpowernode.util.httprequestor;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.Map;
public class HttpRequestor {
private String charset = "utf-8";
private Integer connectTimeout = null;
private Integer socketTimeout = null;
private String proxyHost = null;
private Integer proxyPort = null;
/**
* Do GET request
* @param url
* @return
* @throws Exception
* @throws IOException
*/
public String doGet(String url) throws Exception {
URL localURL = new URL(url);
URLConnection connection = openConnection(localURL);
HttpURLConnection httpURLConnection = (HttpURLConnection)connection;
httpURLConnection.setRequestProperty("Accept-Charset", charset);
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
StringBuffer resultBuffer = new StringBuffer();
String tempLine = null;
if (httpURLConnection.getResponseCode() >= 300) {
throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
}
try {
inputStream = httpURLConnection.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);
while ((tempLine = reader.readLine()) != null) {
resultBuffer.append(tempLine);
}
} finally {
if (reader != null) {
reader.close();
}
if (inputStreamReader != null) {
inputStreamReader.close();
}
if (inputStream != null) {
inputStream.close();
}
}
return resultBuffer.toString();
}
/**
* Do POST request
* @param url
* @param parameterMap
* @return
* @throws Exception
*/
public String doPost(String url, Map parameterMap) throws Exception {
/* Translate parameter map to parameter date string */
StringBuffer parameterBuffer = new StringBuffer();
if (parameterMap != null) {
Iterator iterator = parameterMap.keySet().iterator();
String key = null;
String value = null;
while (iterator.hasNext()) {
key = (String)iterator.next();
if (parameterMap.get(key) != null) {
value = (String)parameterMap.get(key);
} else {
value = "";
}
parameterBuffer.append(key).append("=").append(value);
if (iterator.hasNext()) {
parameterBuffer.append("&");
}
}
}
System.out.println("POST parameter : " + parameterBuffer.toString());
URL localURL = new URL(url);
URLConnection connection = openConnection(localURL);
HttpURLConnection httpURLConnection = (HttpURLConnection)connection;
httpURLConnection.setDoOutput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Accept-Charset", charset);
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpURLConnection.setRequestProperty("Content-Length", String.valueOf(parameterBuffer.length()));
OutputStream outputStream = null;
OutputStreamWriter outputStreamWriter = null;
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
StringBuffer resultBuffer = new StringBuffer();
String tempLine = null;
try {
outputStream = httpURLConnection.getOutputStream();
outputStreamWriter = new OutputStreamWriter(outputStream);
outputStreamWriter.write(parameterBuffer.toString());
outputStreamWriter.flush();
if (httpURLConnection.getResponseCode() >= 300) {
throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
}
inputStream = httpURLConnection.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);
while ((tempLine = reader.readLine()) != null) {
resultBuffer.append(tempLine);
}
} finally {
if (outputStreamWriter != null) {
outputStreamWriter.close();
}
if (outputStream != null) {
outputStream.close();
}
if (reader != null) {
reader.close();
}
if (inputStreamReader != null) {
inputStreamReader.close();
}
if (inputStream != null) {
inputStream.close();
}
}
return resultBuffer.toString();
}
private URLConnection openConnection(URL localURL) throws IOException {
URLConnection connection;
if (proxyHost != null && proxyPort != null) {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
connection = localURL.openConnection(proxy);
} else {
connection = localURL.openConnection();
}
return connection;
}
/**
* Render request according setting
* @param request
*/
private void renderRequest(URLConnection connection) {
if (connectTimeout != null) {
connection.setConnectTimeout(connectTimeout);
}
if (socketTimeout != null) {
connection.setReadTimeout(socketTimeout);
}
}
/*
* Getter & Setter
*/
public Integer getConnectTimeout() {
return connectTimeout;
}
public void setConnectTimeout(Integer connectTimeout) {
this.connectTimeout = connectTimeout;
}
public Integer getSocketTimeout() {
return socketTimeout;
}
public void setSocketTimeout(Integer socketTimeout) {
this.socketTimeout = socketTimeout;
}
public String getProxyHost() {
return proxyHost;
}
public void setProxyHost(String proxyHost) {
this.proxyHost = proxyHost;
}
public Integer getProxyPort() {
return proxyPort;
}
public void setProxyPort(Integer proxyPort) {
this.proxyPort = proxyPort;
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
}
写一个调用的测试类:
package com.bjpowernode.util.httprequestor;
import java.util.HashMap;
import java.util.Map;
public class Call {
public static void main(String[] args) throws Exception {
/* Post Request */
Map dataMap = new HashMap();
dataMap.put("username", "Nick Huang");
dataMap.put("blog", "IT");
System.out.println(new HttpRequestor().doPost("http://localhost:8080/OneHttpServer/", dataMap));
/* Get Request */
System.out.println(new HttpRequestor().doGet("http://localhost:8080/OneHttpServer/"));
}
}
OK,完成!!
简单测试
以上的请求地址都是http://localhost:8080/OneHttpServer/
这是自己的一个用于测试的Web Application,就一个简单的Servlet和web.xml。毕竟需要测试请求参数是否能正常接收,处理超时的情况。
LoginServlet
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String blog = request.getParameter("blog");
System.out.println(username);
System.out.println(blog);
response.setContentType("text/plain; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("It is ok!");
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>OneHttpServer</display-name> <welcome-file-list> <welcome-file>LoginServlet</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>LoginServlet</display-name> <servlet-name>LoginServlet</servlet-name> <servlet-class>LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> </web-app>
# java
# 发送http请求
# java发送https请求
# URLConnection发送HTTP请求
# JAVA发送HTTP请求
# 返回HTTP响应内容
# 应用及实例代码
# JAVA通过HttpClient发送HTTP请求的方法示例
# Java 发送http请求上传文件功能实例
# java发送http请求并获取状态码的简单实例
# 详解Java发送HTTP请求
# java利用java.net.URLConnection发送HTTP请求的方法详解
# Java 发送http请求(get、post)的示例
# Java 如何使用Feign发送HTTP请求
# Java发送http请求的示例(get与post方法请求)
# JAVA发送HTTP请求的四种方式总结
# 自己的
# 都是
# 这是
# 定位器
# 两种
# 中有
# 有许多
# 对其
# 大同小异
# 特有的
# 不需
# 这两种
# 多处
# 是否能
# 都写
# 很好用
# 大段
# 参数设置
# 更灵活
# 可用于
相关文章:
定制建站哪家更专业可靠?推荐榜单揭晓
北京网站制作的公司有哪些,北京白云观官方网站?
c++怎么用jemalloc c++替换默认内存分配器【性能】
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
建站主机如何选?性能与价格怎样平衡?
如何在阿里云完成域名注册与建站?
如何选购建站域名与空间?自助平台全解析
建站主机是否属于云主机类型?
宝塔新建站点为何无法访问?如何排查?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
已有域名和空间,如何快速搭建网站?
Swift开发中switch语句值绑定模式
Android滚轮选择时间控件使用详解
如何选择建站程序?包含哪些必备功能与类型?
css网站制作参考文献有哪些,易聊怎么注册?
如何在Golang中使用replace替换模块_指定本地或远程路径
大型企业网站制作流程,做网站需要注册公司吗?
如何在IIS中配置站点IP、端口及主机头?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
建站之星如何助力企业快速打造五合一网站?
建站之星图片链接生成指南:自助建站与智能设计教程
如何确保西部建站助手FTP传输的安全性?
如何在建站之星绑定自定义域名?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
全景视频制作网站有哪些,全景图怎么做成网页?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
建站10G流量真的够用吗?如何应对访问高峰?
如何快速辨别茅台真假?关键步骤解析
孙琪峥织梦建站教程如何优化数据库安全?
建站主机选虚拟主机还是云服务器更好?
如何在Tomcat中配置并部署网站项目?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
,交易猫的商品怎么发布到网站上去?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
c# await 一个已经完成的Task会发生什么
h5在线制作网站电脑版下载,h5网页制作软件?
如何在IIS中新建站点并解决端口绑定冲突?
自助网站制作软件,个人如何自助建网站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何使用Golang table-driven基准测试_多组数据测量函数效率
建站之星安装后界面空白如何解决?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何通过建站之星自助学习解决操作问题?
小建面朝正北,A点实际方位是否存在偏差?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何在宝塔面板中修改默认建站目录?
*请认真填写需求信息,我们会在24小时内与您取得联系。