该空间是个人实践过程中的总结,欢迎交流吐槽!

【脚本写作】Java: HttpURLConnection请求处理

上一篇 / 下一篇  2017-02-14 20:11:17 / 个人分类:Java

下文代码不解释,调试提供,仅做参考,http request的相关理论知识,可网上搜索。

一般而言,request请求入参:post需要通过set到attribute,而get则直接放到请求的URL中。拼接示例:(http://www.baidu.com?userName=Janesong&page=5)

常见的Type类型有:
String reqHttpContentType = "application/x-www-form-urlencoded; charset=utf-8";
String reqHttpContentType = "text/plain; charset=utf-8";
static String reqHttpContentType = "application/json; charset=utf-8";


======================================================================================

import java.io.*;
import java.net.URL;
import java.net.HttpURLConnection;
import java.nio.charset.StandardCharsets;

/**
 * Created by Janesong on 2016/8/3. Modified with Cookies on 2017/2/10
 */
public class HttpRequest {

    /**
     * HttpURLConnect API Request
     *
     * @param String HttpVo httpVo
     * @return String
     * @author Janesong on 2016-8-3
     **/
    public static HttpVo sendRequestHttp(HttpVo httpVo) throws Exception {
        int httpConnectTimeOut = TestConfigUtil.getInstance().getHttpURLConnectTimeOut();
        int httpReadTimeOut = TestConfigUtil.getInstance().getHttpURLReadTimeOut();
//        String httpAthorization = HttpRequest.getHttpBasicAuth();

        String httpMessage = "";
        String responseBody = "";       // Http返回消息体
        int responseCode = -1;          // Http返回码

        // post请求的参数
        byte[] paraData = httpVo.getReqParameters().getBytes(StandardCharsets.UTF_8);

        URL bjURL = new URL(httpVo.getReqURL());
        HttpURLConnection urlConn = (HttpURLConnection) objURL.openConnection();
        // 设置HTTP请求的属性
        urlConn.setRequestMethod(httpVo.getReqType());  // 设置请求方法为:POST、GET、DELETE、PUT
        urlConn.setReadTimeout(httpReadTimeOut);        // 设置读取超时为5秒
        urlConn.setConnectTimeout(httpConnectTimeOut);  // 设置连接网络超时为10秒
        urlConn.setDoInput(true);                       // 设置此方法,允许从URL读取内容
        urlConn.setUseCaches(false);                    // 不允许缓存
        urlConn.setInstanceFollowRedirects(false);      // 不允许重定向
        urlConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
        urlConn.setRequestProperty("Content-Type", httpVo.getReqContentType());
        urlConn.setRequestProperty("Content-Length", Integer.toString(paraData.length));
        urlConn.setRequestProperty("Cookie", httpVo.getReqCookies());
//        urlConn.setRequestProperty("Authorization", httpAthorization);
//        urlConn.setRequestProperty("X-Forwarded-For", httpVo.getReqIPAddress());  // 指定ip发送请求-proxy, Pass
        urlConn.setRequestProperty("X-Real-Ip", httpVo.getReqIPAddress());        // 指定ip发送请求-real,Pass

        urlConn.setDoOutput(true);      // 设置此方法,允许向URL输入内容
        // 获得一个输出流urlConnection.getOutputStream(),再向服务器写数据.
        DataOutputStream utputStream = new DataOutputStream(urlConn.getOutputStream());
        outputStream.write(paraData);
// 当设置http的Authorization属性后,请使用下述代码
//        if (!httpVo.getReqType().equals("GET")) {            // GET方法不支持if内属性设置,否则当做POST处理
//            urlConn.setDoOutput(true);      // 设置此方法,允许向URL输入内容
//            // 获得一个输出流urlConnection.getOutputStream(),再向服务器写数据.
//            DataOutputStream wr = new DataOutputStream(urlConn.getOutputStream());
//            wr.write(paraData);
//        }

        try {

            responseCode = urlConn.getResponseCode();      // 调用此方法就不必再使用urlConn.connect()方法
            httpVo.setResponseHttpCode(responseCode);

            if (responseCode == 200 || responseCode == 201) {
                httpVo.setIsSuccess(true);
                httpMessage = httpVo.getReqType() + " Test API Success ! The response code: " + responseCode;
                httpVo.setResponseHttpMessage(httpMessage);

                responseBody = getMessageFromJSON(urlConn);
                if (responseBody.equals("null")) {
                    responseBody = "";
                }
                httpVo.setResponseHttpBody(responseBody);

            } else {
                httpMessage = httpVo.getReqType() + " API failed: " + httpVo.getReqURL() + "?"
                        + httpVo.getReqParameters() + " response code: " + responseCode;
                httpVo.setResponseHttpMessage(httpMessage + "\n  " + urlConn.getResponseMessage());
            }

        } catch (Exception exLog) {
            exLog.printStackTrace();
        } finally {
            if (outputStream != null) {
                outputStream.flush();
                outputStream.close();
            }
            if (urlConn != null) {
                urlConn.disconnect();   // 关闭连接
            }
        }
        return httpVo;
    }

    /**
     * 将消息体中的InputStream转为String
     *
     * @param HttpURLConnection urlConn
     * @return String
     * @author Janesong on 2016-8-3
     **/
    public static String getMessageFromJSON(HttpURLConnection urlConn) throws Exception {
        String responseMessage = null;    // 接口返回消息体

        StringBuffer stringBuffer = new StringBuffer();
        InputStream inputStream = null;

        try {

            inputStream = new BufferedInputStream(urlConn.getInputStream());
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));   // 避免服务端返回的中文变乱码,可修改编码格式
            String inputLine = "";
            while ((inputLine = bufferedReader.readLine()) != null) {
                stringBuffer.append(inputLine);
            }
            responseMessage = stringBuffer.toString();

        } catch (Exception exLog) {
            exLog.printStackTrace();
        } finally {
            if (inputStream != null) {
//                System.out.println("Message: " + responseMessage);
                inputStream.close();
            }
        }
        return responseMessage;
    }

    /**
     * 获取Http Authorization   -- Base64 Encode
     *
     * @return String
     * @author Janesong on 2016-9-9
     **/
    public static String getHttpBasicAuth() {

        String name = TestConfigUtil.getInstance().getMasterAPIOperator();
        String password = TestConfigUtil.getInstance().getMasterAPIOperatePasswd();

        String authString = name + ":" + password;
        String authorizationHeaderValue = "Basic " + java.util.Base64.getEncoder().encodeToString(authString.getBytes());

        return authorizationHeaderValue;
    }

}

TAG: java Java

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-19  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 17792
  • 日志数: 16
  • 建立时间: 2016-09-08
  • 更新时间: 2018-03-28

RSS订阅

Open Toolbar