下文代码不解释,调试提供,仅做参考,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.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;
}
}