使用URLConnection与ApacheHttpClient进行http访问
程序员文章站
2022-07-16 14:12:50
...
发送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; } }
上一篇: 像坏人一样勤奋