Java模拟Http post、get请求

时间:2022-08-19 16:59:23
   /**
* post
* 2016-6-12 下午2:16:14 李锋镝
* @param url POST地址
* @param data POST数据NameValuePair[]
* @return 响应的参数
*/
public static String post(String url,NameValuePair[] data){

String response = "";

HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod(url);

//设置请求编码
postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"GBK");

postMethod.setRequestBody(data);

//设置请求头header参数
postMethod.setRequestHeader("userId","57601095");
postMethod.setRequestHeader("userSession","57601095");
postMethod.setRequestHeader("cityid","31000");

int statusCode = 0;

try {
statusCode = httpClient.executeMethod(postMethod);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

//301、302重定向
if(statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY){
Header locationHeader = postMethod.getResponseHeader("location");
String location = null;
if (locationHeader != null) {
location = locationHeader.getValue();
System.out.println("重定向跳转页面:" + location);
response= post(location,data);//用跳转后的页面重新请求。
} else {
System.err.println("location is null.");
}
}else {
System.out.println(postMethod.getStatusLine());
try {
byte[] b=postMethod.getResponseBody();
response = new String(b,"GBK");
} catch (IOException e) {
e.printStackTrace();
}
postMethod.releaseConnection();
}

System.out.println("POST响应参数:"+response);

return response;
}

/**
* get方式
* 2016-6-12 下午2:38:45 李锋镝
* @param url
* @return
*/
public static String get(String url){

String response = "";

HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod(url);

getMethod.setRequestHeader("userId","56166702");
getMethod.setRequestHeader("userSession","56166702");
getMethod.setRequestHeader("cityid","31000");

int statusCode = 0;

try {
statusCode = httpClient.executeMethod(getMethod);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

//301、302重定向
if(statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY){
Header locationHeader = getMethod.getResponseHeader("location");
String location = null;
if (locationHeader != null) {
location = locationHeader.getValue();
System.out.println("重定向跳转页面:" + location);
response= get(location);//用跳转后的页面重新请求。
} else {
System.err.println("location is null.");
}
}else {
System.out.println(getMethod.getStatusLine());
try {
byte[] b=getMethod.getResponseBody();
response = new String(b,"GBK");
} catch (IOException e) {
e.printStackTrace();
}
getMethod.releaseConnection();
}

System.out.println("GET响应参数:"+response);

return response;
}

对于post请求,我们需要根据对应接口的编码设置请求编码,防止中文乱码。请求需要的参数则放在NameValuePair数组中,NameValuePair用法如下:

NameValuePair page = new NameValuePair("page", "1");
NameValuePair pageCount = new NameValuePair("pageCount", "10");
NameValuePair state = new NameValuePair("state", "1");
NameValuePair[] data = {page,pageCount,state};

而get请求,则不需要改变编码,默认的ISO-8859-1编码,一般后台会根据这个处理中文,请求的时候只需要写好请求的url即可。

原文地址:李锋镝的个人博客>>http://www.lifengdi.com/article/10034.html