java发送http的json请求,并接收返回结果
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
/**
* Created by zhao on 15-9-22.
*/
public class HttpClient {
public static String send(String addr,String json) throws Exception {
String resp = "0";
URL url = new URL(addr);
URLConnection urlConnection = url.openConnection();
HttpURLConnection httpUrlConnection = (HttpURLConnection) urlConnection;
httpUrlConnection.setRequestMethod("POST");
// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
// http正文内,因此需要设为true, 默认情况下是false;
httpUrlConnection.setDoOutput(true);
// 设置是否从httpUrlConnection读入,默认情况下是true;
httpUrlConnection.setDoInput(true);
/***
* 设置超时时间
*/
httpUrlConnection.setConnectTimeout(1000*3);
httpUrlConnection.setReadTimeout(1000*3);
// Post 请求不能使用缓存
httpUrlConnection.setUseCaches(false);
// 设定传送的内容类型是可序列化的java对象
// (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
httpUrlConnection.setRequestProperty("Content-type", "application/json");
httpUrlConnection.setRequestProperty("Accept-Charset", "utf-8");
httpUrlConnection.setRequestProperty("contentType", "utf-8");
// 连接,从上述url.openConnection()至此的配置必须要在connect之前完成,
httpUrlConnection.connect();
// 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,
// 所以在开发中不调用上述的connect()也可以)。
OutputStream outStrm = httpUrlConnection.getOutputStream();
OutputStreamWriter wr = new OutputStreamWriter(outStrm, "utf-8");
if(null!=json &&!"".equals(json)){
wr.write(json);
}
wr.flush();
wr.close();
// 获取输出
BufferedReader rd = new BufferedReader(new InputStreamReader(
httpUrlConnection.getInputStream(), "utf-8"));
StringBuffer sb = new StringBuffer();
sb.append("");
int ch;
while (true) {
ch = rd.read();
if (ch > -1) {
sb.append((char) ch);
} else {
break;
}
}
resp = sb.toString();
rd.close();
return resp;
}
/**
* 获取ip地址
*
* @param request
* @return
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
// 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串Ip值
// 是取X-Forwarded-For中第一个非unknown的有效IP字符串
String[] str = ip.split(",");
if (str != null && str.length > 1) {
ip = str[0];
}
return ip;
}
}