如何通过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请求的四种方式总结
# 自己的
# 都是
# 这是
# 定位器
# 两种
# 中有
# 有许多
# 对其
# 大同小异
# 特有的
# 不需
# 这两种
# 多处
# 是否能
# 都写
# 很好用
# 大段
# 参数设置
# 更灵活
# 可用于
相关文章:
深圳网站制作平台,深圳市做网站好的公司有哪些?
MySQL查询结果复制到新表的方法(更新、插入)
平台云上自助建站如何快速打造专业网站?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
定制建站哪家更专业可靠?推荐榜单揭晓
建站之星如何快速解决建站难题?
如何选择美橙互联多站合一建站方案?
一键网站制作软件,义乌购一件代发流程?
建站之星后台管理系统如何操作?
建站主机类型有哪些?如何正确选型
测试制作网站有哪些,测试性取向的权威测试或者网站?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何选择适合PHP云建站的开源框架?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
如何用PHP工具快速搭建高效网站?
简单实现Android文件上传
建站之星IIS配置教程:代码生成技巧与站点搭建指南
如何正确选择百度移动适配建站域名?
如何在IIS7上新建站点并设置安全权限?
建站VPS配置与SEO优化指南:关键词排名提升策略
建站之星微信建站一键生成小程序+多端营销系统
实现点击下箭头变上箭头来回切换的两种方法【推荐】
兔展官网 在线制作,怎样制作微信请帖?
个人摄影网站制作流程,摄影爱好者都去什么网站?
C#如何使用XPathNavigator高效查询XML
如何用美橙互联一键搭建多站合一网站?
在线制作视频网站免费,都有哪些好的动漫网站?
如何通过远程VPS快速搭建个人网站?
如何确认建站备案号应放置的具体位置?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
如何用搬瓦工VPS快速搭建个人网站?
如何在橙子建站中快速调整背景颜色?
定制建站流程步骤详解:一站式方案设计与开发指南
Swift中循环语句中的转移语句 break 和 continue
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何在云虚拟主机上快速搭建个人网站?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何获取免费开源的自助建站系统源码?
建站之星价格显示格式升级,你的预算足够吗?
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何选择可靠的免备案建站服务器?
C#怎么使用委托和事件 C# delegate与event编程方法
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
建站主机选购指南与交易推荐:核心配置解析
网站制作的步骤包括,正确网址格式怎么写?
宝塔建站无法访问?如何排查配置与端口问题?
建站OpenVZ教程与优化策略:配置指南与性能提升
如何选择适配移动端的WAP自助建站平台?
*请认真填写需求信息,我们会在24小时内与您取得联系。