赞
踩
开发中经常遇到发送一个远程请求并解析返回结果的情况,那可以在项目中写一个Get/Post的组件,以后遇到远程请求直接调用即可
实现步骤为:
1.创建一个URL(java.net.URL)对象
2.打开url之间的连接
3.设置通用请求属性
(user-agent即用户代理,简称UA,是头域的组成部分)
4.建立实际连接
5.获取响应头字段集合
6.把Get请求的响应头打印出来看看
7.定义BufferedReader输入流来读取URL的响应
8.关闭输入流
post请求步骤和上面的基本一致,但需要设置
这两个字段是什么作用呢?看看源码,post请求参数不像get那样拼接在url之后,而是放在http正文内
还需要定义BufferedReader输入流来读取URL的响应
因为初始话URL和设置公共header属性这块代码一样,可以把公共部分的方法封装成一个通用方法
然后再写两个模拟方法
设置server.port端口为8989,然后启动项目
最后写两个模拟请求方法
输出如下
getMap:{null=[HTTP/1.1 200], Content-Length=[32], Date=[Thu, 21 Feb 2019 07:56:16 GMT], Content-Type=[text/plain;charset=UTF-8]}
null:[HTTP/1.1 200]
Content-Length:[32]
Date:[Thu, 21 Feb 2019 07:56:16 GMT]
Content-Type:[text/plain;charset=UTF-8]
getResponse:username:winson,password:1234567
postResponse:username:winson,password:1234567
完整代码如下:
HttpRequest.Java
public class HttpRequest {
/**
* GET方法
*
* @param url 请求URL
* @param reqParam 请求参数 参数形式为 p1=value1&p2=vlaue2
* @return Response 远程资源的响应结果
*/
private static StringBuilder getRequest(String url, String reqParam) {
BufferedReader in = null;
String readLine;
StringBuilder result = new StringBuilder();
try {
String urlWithParam = url + "?" + reqParam;
URLConnection urlConnection = getUrlConnection(urlWithParam); // 打开和URL之间的连接
if (urlConnection != null) { // 建立实际的连接
urlConnection.connect();
Map> map = urlConnection.getHeaderFields(); // 获取所有响应头字段
System.out.println("map:" + map);
for (String key : map.keySet()) { // 遍历输出响应头字段
System.out.println(key + ":" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
while ((readLine = in.readLine()) != null) {
result.append(readLine);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close(); // 关闭输入流
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
return result;
}
/**
* POST方法
*
* @param url 请求URL
* @param reqParam 请求参数 参数形式: p1=value1&p2=vlaue2
* @return 远程资源的响应结果
*/
private static StringBuilder postRquest(String url, String reqParam) {
PrintWriter printWriter = null;
BufferedReader bufferedReader = null;
StringBuilder result = new StringBuilder();
try {
URLConnection urlConnection = getUrlConnection(url);
if (urlConnection == null) { // 获取URLConnection对象对应的输出流
return null;
}
// POST请求需要设置如下两行
urlConnection.setDoInput(true); //读取连接请求
urlConnection.setDoOutput(true); //设置是否向connection输出,post请求参数要放在http正文内
urlConnection.setUseCaches(false); //POST请求不能使用缓存
printWriter = new PrintWriter(urlConnection.getOutputStream());
printWriter.print(reqParam); // 发送请求参数
printWriter.flush(); // flush输出流的缓冲
bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); // 定义BufferedReader输入流来读取URL的响应
String readLine;
while ((readLine = bufferedReader.readLine()) != null) {
result.append(readLine);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (printWriter != null) {
printWriter.close(); //关闭输出流
}
if (bufferedReader != null) {
bufferedReader.close(); //输入流
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
return result;
}
private static URLConnection getUrlConnection(String url) {
try {
URL urlObject = new URL(url);
// 打开和URL之间的连接
URLConnection urlConnection = urlObject.openConnection();
// 设置通用请求属性
urlConnection.setRequestProperty("accept
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。