使用HttpUrlConnection在后台发送请求
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class HttpUtils {
private static final Logger logger = LoggerFactory.getLogger(HttpUtils.class);
public static String do_post(String requestUrl, String requestData) {
try {
URL url = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("Content-Type", "application/xml");
conn.setRequestProperty("Content-Length", String.valueOf(requestData.length()));
conn.setRequestProperty("Cache-Control", "no-cache");
conn.setRequestProperty("Content-Type", "text/xml");
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
conn.setConnectTimeout(3000); // 设置发起连接的等待时间,3s
conn.setReadTimeout(30000); // 设置数据读取超时的时间,30s
OutputStream out = conn.getOutputStream();
out.write(requestData.getBytes("utf-8"));
out.flush();
out.close();
// 请求返回的状态
if (conn.getResponseCode() == 200) {
// 请求返回的数据
InputStream in = conn.getInputStream();
try {
byte[] responseData = new byte[in.available()];
in.read(responseData);
System.out.println("receive msg:"+new String(responseData,"utf-8"));
return new String(responseData,"utf-8");
} catch (Exception e1) {
e1.printStackTrace();
}
} else {
System.out.println("no++");
return "NO_MESSAGE";
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 向指定URL发送GET方法的请求
* @param url 发送请求的URL
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
String urlNameString = "";
try {
if(!StringUtils.isEmpty(param)){
urlNameString = url + "?" + param;
}else{
urlNameString = url;
}
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
logger.error("发送GET请求出现异:" +url+" "+ e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
logger.info("请求成功"+urlNameString+" 返回"+result);
return result;
}
}