`

使用URLConnection与ApacheHttpClient进行http访问

阅读更多

发送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;
	} 

}

 

分享到:
评论

相关推荐

    使用URL和URLConnection(多线程下载)

    ### 使用URL和URLConnection进行多线程下载的深入探讨 在现代互联网应用中,高效的数据传输和资源下载成为了提升用户体验的关键因素之一。对于大型文件的下载,传统的单线程下载方式往往无法充分利用网络带宽,尤其...

    URL以及URLConnection的使用

    本文将深入探讨URL的构造与解析、URLConnection的功能和使用方法,以及如何通过它们实现HTTP请求。 首先,URL是互联网上的资源定位标识符,它包括协议类型(如http、https、ftp等)、主机名、端口号、路径、查询...

    URLConnection进行网络编程

    在本文中,我们将深入探讨如何使用`URLConnection`进行网络编程,并结合提供的文件"4.3使用URLConnection进行网络编程"和"ConnectionServlet"来构建一个简单的客户端-服务器通信示例。 首先,了解`URLConnection`的...

    URLConnection的使用(1)

    ### 使用URLConnection进行网络通信 在Java开发中,`URLConnection`是一个非常重要的类,它提供了用于与URL进行连接、通信的功能。对于那些希望实现客户端与服务器端(如网页或Servlet等)交互的应用开发者来说,...

    例10.03 使用URLConnection对象访问远程文件.rar_remote access java_url_远程文件

    总结,使用`URLConnection`访问远程文件涉及多个步骤,包括创建URL对象,建立连接,设置请求属性,读取或写入数据,并处理响应。通过熟练掌握这些概念和方法,开发者可以构建功能强大的网络应用程序,轻松地与远程...

    使用urlconnection下载文件或图片并保存到本地

    * 使用URLConnection下载文件或图片并保存到本地。 * * @author 老紫竹(laozizhu.com) */ public class URLConnectionDownloader { public static void main(String[] args) throws Exception { ...

    通过java.net.URLConnection发送HTTP请求

    在Java编程中,`java.net.URLConnection`是用于与各种Internet协议进行通信的抽象类,而HTTP(超文本传输协议)是最常见的应用之一。本文将深入探讨如何利用URLConnection类发送HTTP请求,理解其工作原理,并提供...

    Android使用URLConnection提交请求的实现

    在Android开发中,与服务器进行数据交互是常见的需求,而`URLConnection`是Java标准库提供的一种基础网络通信组件,适用于Android平台。本文将详细介绍如何在Android应用中使用`URLConnection`来提交HTTP请求,包括...

    java中用URLConnection_类post方式提交表单

    java中用URLConnection类post方式提交表单是指在java应用程序中使用java.net.URLConnection类来实现POST方式的表单提交。POST方式是HTTP协议中的一种常见的请求方法,它允许客户端向服务器发送数据。下面是使用...

    UrlConnection连接和Socket连接的区别

    在`Handler.java`这个文件中,可能涉及到Android的消息处理机制,与`UrlConnection`和`Socket`的直接关系不大,但在Android环境中,`Handler`常用于在主线程和工作线程之间同步网络操作的结果,确保UI更新的安全性。...

    java URL URLConnection

    一旦有了`URL`对象,我们就可以使用`openConnection()`方法来建立与该资源的连接,这会返回一个`URLConnection`对象。`URLConnection`是所有连接类的抽象基类,提供了与资源进行数据传输的基本框架。你可以设置请求...

    java中用URLConnection类post方式提交表单.pdf

    Java 中使用 URLConnection 类 POST 方式提交表单 Java 中使用 URLConnection 类 POST 方式提交表单是 Java 语言中的一种常用技术,用于实现 HTTP 请求代理。下面我们将详细介绍该技术的实现细节。 首先,我们需要...

    客户端页面截取!URLCONNECTION

    在Java编程语言中,我们可以使用多种方法来实现这一功能,其中URLConnection是Java标准库提供的一种网络通信接口,虽然HttpClient更为流行,但URLConnection在某些场景下依然具有实用性。下面我们将深入探讨...

    Android移动开发-使用URLConnection提交请求的实现

    URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和URL之间的通信连接。程序可以通过URLConnection实例向该URL发送请求,读取URL引用的资源。 程序Demo示范了如何向Web站点发送GET请求、...

    android 使用URL和URLConnection(多线程下载)_Hi Android_百度空间

    android 使用URL和URLConnection(多线程下载)_Hi Android_百度空间

    java.net.URLConnection发送HTTP请求与通过Apache HttpClient发送HTTP请求比较

    在Java编程中,发送HTTP请求是常见的任务,用于与服务器进行数据交互。有两种常见的方法:一是使用`java.net.URLConnection`类,二是通过Apache HttpClient库。这篇文章将对比这两种方法,探讨它们的优缺点以及适用...

    IOS 程序使用urlconnection连接服务器方法

    ### IOS程序使用URLConnection连接服务器方法 #### 一、引言 在iOS开发中,应用程序往往需要与后端服务器进行通信来获取数据或提交用户操作的结果。`NSURLConnection`(现已被`URLSession`替代)是一种常用的网络...

    java中URL以及URLConnection类的使用

    在Java中进行网络编程时,经常会用到URL和URLConnection这两个类。它们位于***包中,是Java网络编程的核心组件。下面就详细介绍这两个类的使用方法和相关知识点。 ### URL类 URL类是统一资源定位符(Uniform ...

Global site tag (gtag.js) - Google Analytics