java的HttpClient实现

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;
    }












}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值