发送http请求
方法一(通过URLConnection):
package com.sand.http.url;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
/**
* 通过URLConnection进行http请求
*
* @author xiaoyun 2015-10-14
*/
public class URLClient {
public static void main(String[] args) {
String getResp = get("https://www.baidu.com", "a=a");
String postResp = post("http://www.cnblogs.com/", "a=a&name=xiaoyun", "utf8");
System.out.println("get请求:" + getResp);
System.out.println("post请求:" + postResp);
}
/**
* 向指定URL发送GET方法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String get(String url, String params) {
String resp = "";
BufferedReader in = null;
try {
URL realUrl = new URL(url+"?"+params);
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 读取相应到流
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while((line = in.readLine()) != null) {
resp += line;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return resp;
}
/**
* 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String post(String url, String params, String charset) {
String resp = "";
PrintWriter out = null;
BufferedReader in = null;
try {
URL realUrl = new URL(url);
// 打开连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送post请求需配置
conn.setDoInput(true);
conn.setDoOutput(true);
// 获取URLConnection对应的输出流
out = new PrintWriter(conn.getOutputStream());
out.print(params.getBytes("gbk"));
out.flush();
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));
String line;
while((line = in.readLine()) != null) {
resp += line;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return resp;
}
}
方法二(apacheHttpClient方式):
需要引入jar包,可以去apache官网下载(http://hc.apache.org/downloads.cgi),或者在我的附件中下载
package com.sand.http.url;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
/**
*
* 使用apache的httpClient发送http请求
*
* @author xiaoyun 2015-10-14
*/
public class ApacheHttpClient {
public static void main(String[] args) {
String getResp = httpGet("http://www.sina.com.cn", "utf-8");
String postResp = httpPost("a=a", "http://www.cnblogs.com/", "utf-8");
System.out.println("get请求:" + getResp);
System.out.println("post请求:" + postResp);
}
public static String httpGet(String url,String charset) {
String httpResult = "";
AbstractHttpClient httpclient = null;
try{
HttpGet httpRequest = new HttpGet(url);
// 设置 超时机制 毫秒为单位,重连3机制
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 30 * 1000);
HttpConnectionParams.setSoTimeout(params, 45 * 1000);
HttpConnectionParams.setTcpNoDelay(params, true);
HttpClientParams.setRedirecting(params, false);
httpclient = new DefaultHttpClient(params);
HttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(3,true);
httpclient.setHttpRequestRetryHandler(retryHandler);
HttpResponse httpResponse = httpclient.execute(httpRequest);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){//请求成功
httpResult = EntityUtils.toString(httpResponse.getEntity(),charset);
}else{
int statusCode = httpResponse.getStatusLine().getStatusCode() ;
}
}catch(Exception e){
}finally{
if(httpclient != null)httpclient.getConnectionManager().shutdown();
}
return httpResult;
}
public static String httpPost(String paramContent, String url,String charset) {
String httpResult = "";
AbstractHttpClient httpclient = null;
try{
HttpPost httpRequest = new HttpPost(url);
List<NameValuePair> params = new ArrayList<NameValuePair>();
String[] paramValues = paramContent.split("&");
for (int i = 0; i < paramValues.length; i++) {
String[] paramValue = paramValues[i].split("=");
if(paramValue != null && paramValue.length == 2){
params.add(new BasicNameValuePair(paramValue[0], paramValue[1]));
}
}
HttpEntity httpentity = new UrlEncodedFormEntity(params, charset);
httpRequest.setHeader("accept", "*/*");
httpRequest.setHeader("connection", "Keep-Alive");
httpRequest.setEntity(httpentity);
//设置超时 毫秒为单位,重连机制
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
HttpConnectionParams.setSoTimeout(httpParams, 45 * 1000);
HttpConnectionParams.setTcpNoDelay(httpParams, true);
HttpClientParams.setRedirecting(httpParams, false);
httpclient = new DefaultHttpClient(httpParams);
HttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(3,true);
httpclient.setHttpRequestRetryHandler(retryHandler);
HttpResponse httpResponse = httpclient.execute(httpRequest);
System.out.println(httpResponse.getStatusLine().getStatusCode());
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){//HttpStatus.SC_OK表示连接成功
httpResult = EntityUtils.toString(httpResponse.getEntity(),charset);
}else{
int statusCode = httpResponse.getStatusLine().getStatusCode() ;
System.out.println("错误码:" + statusCode);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(httpclient != null)httpclient.getConnectionManager().shutdown();
}
return httpResult;
}
}