Java代码发送Http请求
Posted 十木禾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java代码发送Http请求相关的知识,希望对你有一定的参考价值。
最近在项目中要使用Java代码来发送Http请求,在查找资料的过程中收获颇多,故记此文,以备后看。
这里我将报文头,报文体等信息都存储在Map里面传到方法里面来。
使用GET方式向URL发送请求
/**
* 获取接口返回的结果(GET).
*
* @param getUrl 请求接口的url
* @param requestParam 请求接口的参数
* @param requestHeader 请求接口的Header
* @return 请求接口的返回值
* @throws IOException the io exception
*/
public static String getGetResponseMess(String getUrl, Map<Object, Object> requestParam,Map<Object, Object> requestHeader) throws IOException
String param = "";
if (requestParam != null)
for (Map.Entry<Object, Object> entry : requestParam.entrySet())
if ("".equals(param) || param == "")
param = entry.getKey() + "=" +URLEncoder.encode(entry.getValue().toString(), "utf-8");
else
param = param + "&" + entry.getKey() + "=" +URLEncoder.encode( entry.getValue().toString(), "utf-8");
getUrl=getUrl+"?"+param;
URL url = new URL(getUrl);
// 将url 以 open方法返回的urlConnection 连接强转为HttpURLConnection连接 (标识一个url所引用的远程对象连接)
HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此时cnnection只是为一个连接对象,待连接中
if (requestHeader != null)
// 设置 Header 信息
for (Map.Entry<Object, Object> entry : requestHeader.entrySet())
connection.setRequestProperty(entry.getKey().toString(), entry.getValue().toString());
connection.connect();//建立连接
// 获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) // 循环读取流
sb.append(line);
br.close();// 关闭流
connection.disconnect();// 断开连接
return sb.toString();
使用POST方式向URL发送请求
/**
* 获取接口返回的结果(POST).
*
* @param postUrl 请求接口的url
* @param requestParam 请求接口的参数
* @param requestBodyParam 请求接口的Body
* @param requestHeader 请求接口的Header
* @return 请求接口的返回值
* @throws IOException the io exception
*/
public static String getResponseMess(String postUrl, Map<Object, Object> requestParam,Map<Object, Object> requestHeader) throws IOException
URL url = new URL(postUrl);
// 将url 以 open方法返回的urlConnection 连接强转为HttpURLConnection连接 (标识一个url所引用的远程对象连接)
HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此时cnnection只是为一个连接对象,待连接中
// 设置连接输出流为true,默认false (post 请求是以流的方式隐式的传递参数)
connection.setDoOutput(true);
// 设置连接输入流为true
connection.setDoInput(true);
// 设置请求方式为post
connection.setRequestMethod("POST");
// post请求缓存设为false
connection.setUseCaches(false);
// 设置该HttpURLConnection实例是否自动执行重定向
connection.setInstanceFollowRedirects(true);
if (requestHeader != null)
// 设置 Header 信息
for (Map.Entry<Object, Object> entry : requestHeader.entrySet())
connection.setRequestProperty(entry.getKey().toString(), entry.getValue().toString());
connection.connect();//建立连接
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
String param = "";
if (requestParam != null)
for (Map.Entry<Object, Object> entry : requestParam.entrySet())
if ("".equals(param) || param == "")
param = entry.getKey() + "=" +URLEncoder.encode(entry.getValue().toString(), "utf-8");
else
param = param + "&" + entry.getKey() + "=" +URLEncoder.encode( entry.getValue().toString(), "utf-8");
outputStream.writeBytes(param);
outputStream.flush();
outputStream.close();
// 连接发起请求,处理服务器响应 (从连接获取到输入流并包装为bufferedReader)
BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
StringBuilder sb = new StringBuilder();
// 循环读取流,若不到结尾处
while ((line = bf.readLine()) != null)
sb.append(line).append(System.getProperty("line.separator"));
bf.close(); // 关闭流
connection.disconnect(); // 销毁连接
return sb.toString();
考虑一种情况,如果相应的请求参数存放在 Raw 里面呢?
我们可以使用HttpClient这个包。
下载地址http://download.csdn.net/download/zjq_1314520/10026953
下载完成之后,我们在项目中导入相应的Jar包即可!
对应我封装的Java代码如下:
/**
* 获取接口返回的结果(Raw版本).
*
* @param postUrl 请求接口的url
* @param requestBodyParam 请求Body里面Raw的值
* @param requestHeader 请求头的值
* @return 接口返回参数
* @throws ClientProtocolException the client protocol exception
* @throws IOException the io exception
*/
public static String getResponseMess(String postUrl, String requestBodyParam, Map<Object, Object> requestHeader) throws ClientProtocolException, IOException
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(postUrl);
StringEntity postingString = new StringEntity(requestBodyParam);// Raw等里面的数据
post.setEntity(postingString);
if (requestHeader != null)
for (Map.Entry<Object, Object> entry : requestHeader.entrySet())
post.setHeader(entry.getKey().toString(), entry.getValue().toString());
HttpResponse response = httpClient.execute(post);
String responseMess = EntityUtils.toString(response.getEntity());
return responseMess;
以上就是有关Java代码发送Http请求的相关内容了。
参考博客:
java中的post请求之raw请求–微信api调用java代码示例
java调用http接口
以上是关于Java代码发送Http请求的主要内容,如果未能解决你的问题,请参考以下文章
JAVA代码发送HTTP请求问题(我想实现和服务器进行一次连接时发送两次请求)