`
samjavaeye
  • 浏览: 194515 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HttpClient简单示例

    博客分类:
  • Java
阅读更多

代码中用到的是httpclient4.3.1和httpcore4.3.1,可以在search.maven.org上找到相应的jar和API。

先登录,然后访问指定URL,打印出服务器反馈的HTML源码。实际应用中可以使用jsoup解析获得的HTML源码。

jsoup参考资料:jsoup Cookbook(中文版)

 

 简单的访问一个URL,获取响应文本。访问之前先登录。

public class SimpleExample {
	/** 要访问的网址 */
	private static final String BASE_URL = "http://hostname:8080/jenkins/";
	private static final String LOGIN_URL = BASE_URL + "/j_acegi_security_check";
	private static final String USERNAME = "username";
	private static final String PASSWORD = "password";

	private final CloseableHttpClient httpclient = HttpClientBuilder.create().build();

	private boolean login() {
		HttpPost httpPost = new HttpPost(LOGIN_URL);
		List<NameValuePair> nvps = new ArrayList<NameValuePair>();
		nvps.add(new BasicNameValuePair("j_username", USERNAME));
		nvps.add(new BasicNameValuePair("j_password", PASSWORD));
		try {
			httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
			httpclient.execute(httpPost);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			httpPost.abort();
		}
		return true;
	}

	private String getText(String url) {
		HttpGet httpget = new HttpGet(url);
		String responseBody = null;
		try {
			responseBody = httpclient.execute(httpget, new BasicResponseHandler());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			httpget.abort();
		}
		return responseBody;
	}

	private void run() throws Exception {
		if (login()) {
			System.out.println(getText(BASE_URL));
		}
	}

	public static void main(String[] args) throws Exception {
		new SimpleExample().run();
	}
}

 

 另一个例子是在内网环境中通过代理服务器访问外网URL,代理服务器要求windows域验证。

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.NTCredentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class HttpClientHelper {
	private static final Logger logger = LogManager.getLogger(HttpClientHelper.class);
	/**
	 * 获取一个设置了代理服务器的HttpClient对象,适用于内网中的机器通过代理上外网的情况。
	 * 如果机器加入了windows域,可能需要传入workstation、domain这两个参数。
	 * @param proxyHost
	 *            代理服务器IP或主机名
	 * @param proxyPort
	 *            代理服务器端口号
	 * @param proxyUsername
	 *            代理服务器用户名,可为空
	 * @param proxyPassword
	 *            代理服务器密码,仅当代理服务器用户名为空时可为空
	 * @param workstation
	 *            windows主机名
	 * @param domain
	 *            windows域名
	 * @return
	 */
	public CloseableHttpClient getHttpClientWithProxy(String proxyHost,
			int proxyPort, String proxyUsername, String proxyPassword,
			String workstation, String domain) {
		HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
		HttpHost host = new HttpHost(proxyHost, proxyPort);
		RequestConfig.Builder reqBuilder  = RequestConfig.custom();
		// 设置连接请求超时时间,防止因服务器响应慢导致异常
		reqBuilder.setConnectionRequestTimeout(180000);
		// 设置连接超时时间,防止文件较大网速较慢时导致异常
		reqBuilder.setSocketTimeout(1000 * 60 * 60);
		httpClientBuilder.setDefaultRequestConfig(reqBuilder.build());
		httpClientBuilder.setProxy(host);
		if (proxyUsername != null) {
			BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
			Credentials credentials;
			if (workstation != null) {
				credentials = new NTCredentials(proxyUsername, proxyPassword,
						workstation, domain);
			} else {
				credentials = new UsernamePasswordCredentials(proxyUsername,
						proxyPassword);
			}
			credentialsProvider.setCredentials(new AuthScope(proxyHost,
					proxyPort), credentials);
			httpClientBuilder
					.setDefaultCredentialsProvider(credentialsProvider);
		}
		CloseableHttpClient httpClient = httpClientBuilder.build();
		return httpClient;
	}

	/**
	 * 访问指定的URL,返回字符串形式的响应信息(例如HTML文件内容)
	 * 
	 * @param httpClient
	 * @param url
	 *            要访问的URL
	 * @return
	 */
	public String getText(CloseableHttpClient httpClient, String url) {
		HttpGet httpget = new HttpGet(url);
		String responseBody = null;
		try {
			responseBody = httpClient.execute(httpget,
					new BasicResponseHandler());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			httpget.abort();
		}
		return responseBody;
	}

	/**
	 * 下载文件到本地
	 * @param httpClient
	 * @param url 文件下载链接
	 * @param localFileFullname 本地文件名(全路径)
	 * @return 下载的字节数
	 */
	public int downloadFile(CloseableHttpClient httpClient, String url,
			String localFileFullname) {
		logger.debug("准备下载" + url);
		int byteCount = 0;
		HttpGet httpget = new HttpGet(url);
		CloseableHttpResponse response;
		InputStream in = null;
		FileOutputStream out = null;
		try {
			DecimalFormat df = new DecimalFormat("#,###");
			response = httpClient.execute(httpget);
			HttpEntity entity = response.getEntity();
			long totalBytes = entity.getContentLength();
			logger.debug("\t该文件大小为" + df.format(totalBytes) + "字节。");
			out = new FileOutputStream(localFileFullname);
			byte[] cache = new byte[4096];
			int count = 0;
			in = entity.getContent();
			do {
				count = in.read(cache);
				if (count > 0) {
					out.write(cache, 0, count);
					byteCount += count;
				}
			} while (count > 0);
			if (byteCount == totalBytes)
				logger.debug("\t下载完毕,文件已保存到" + localFileFullname);
			else
				logger.debug("\t下载失败,当前下载" + df.format(byteCount) + "字节。");
			in.close();
			out.close();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (in != null)
					in.close();
				if (out != null)
					out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return byteCount;
	}
}

 

分享到:
评论

相关推荐

    httpclient简单示例说明

    在IT行业中,HttpClient是一个非常重要的工具,特别是在网络编程和API交互...以上就是关于HttpClient简单示例的说明。通过学习和实践,你可以更好地掌握HttpClient的使用,为你的项目提供稳定可靠的网络通信解决方案。

    httpclient简单示例

    在这个简单的示例中,我们将探讨如何使用HTTPClient进行基本的GET和POST请求。 首先,要使用HTTPClient,你需要在项目中引入相应的依赖。对于Java项目,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: `...

    HttpClient使用示例教程

    以下是一个简单的使用示例: ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache....

    HttpClient 调用WebService示例

    HttpClient是Apache基金会开发的一个HTTP客户端库,广泛应用于Java开发者中,用于执行HTTP...对于RESTful API,使用HttpClient则更为简单,只需构造合适的URL和请求体,然后按照HTTP方法(如GET、POST)进行操作即可。

    commons-httpclient-3.1 java API详细index格式文档

    `BasicCookieStore`是简单的内存实现。 六、安全通信与认证 1. `SSLContext`和`SSLSocketFactory`:用于配置和创建SSL/TLS连接,支持HTTPS通信。 2. `Credentials`和`AuthScope`:处理HTTP认证,`...

    HttpClient的小例子

    这个小例子中提供的项目源码应该包含了上述操作的示例代码,你可以直接导入并运行,以了解HttpClient的具体使用。通过学习和实践,你将能熟练掌握HttpClient在实际项目中的应用,如进行网页抓取、API调用等任务。

    HttpClient接口调用工具类(附带demo)

    最后,通过`HttpClient`的`execute`方法发送请求并获取响应。 2. **Get请求**: Get请求是最简单的HTTP请求,用于从服务器获取资源。HttpClient中的`HttpGet`类可以用来创建GET请求。只需提供URL作为构造函数的...

    spring boot封装HttpClient的示例代码

    Spring Boot 封装 HttpClient ...Spring Boot 提供了一个简单的方式来封装 HttpClient,用于实现请求重试机制和处理异常情况。同时,我们也可以使用 @Bean 注解将 HttpClient 封装成一个 Bean,用于在应用程序中使用。

    简单的httpClient访问

    这篇名为“简单的httpClient访问”的博文可能是介绍如何使用HttpClient进行基础的HTTP请求。HttpClient库提供了丰富的功能,包括GET、POST请求,设置请求头,处理响应,以及支持HTTPS等。接下来,我们将深入探讨...

    HttpClient包及例子

    压缩包中的`httpclient-4.0-alpha2.jar`文件包含了HttpClient库的所有类和方法,而`examples`文件可能包含了一些使用HttpClient的示例代码,帮助开发者更好地理解和使用这个库。通过这些示例,你可以学习如何构建...

    httpclient官网教程中文版

    - **灵活性**:与标准库提供的简单HTTP支持相比,HttpClient提供了更多高级特性,比如Cookie管理和自动重定向等,使得开发者可以更灵活地控制HTTP交互行为。 ##### 2.2 HttpClient的功能范围 - **HTTP协议支持**:...

    httpClient实例httpClient调用 http/https实例 忽略SSL验证

    要创建一个简单的HttpClient实例,你需要以下步骤: 1. 引入Apache HttpClient库: 在你的项目中,确保已经添加了Apache HttpClient的依赖。例如,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```...

    HttpClient的简单使用,get、post、上传、下载

    以下是一个简单的Servlet示例,用于处理文件上传: ```java @WebServlet("/upload") public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse ...

    HttpClient框架所需的jar包和一个简单实例

    以下是一个简单的HttpClient使用示例: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org....

    httpclient4.2.1.zip

    《HttpClient 4.2.1:Java开发中的HTTP通信利器》 在Java开发领域,HttpClient是一个广泛使用的库,...无论是简单的GET请求还是复杂的POST操作,HttpClient都能游刃有余,为Java应用程序的网络通信带来极大的便利。

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    总结,`commons-httpclient-3.0.jar`在JAVA中的应用,不仅提供了一种简单易用的HTTP客户端实现,还具有丰富的特性和扩展性,对于理解和实现网络通信具有重要的学习价值。然而,随着技术的进步,开发者应关注并适时...

    HttpClient3.1 学习整理

    为了更好地理解HttpClient3.1的使用,以下是一个简单的示例,展示了如何使用GET方法获取网页内容: ```java import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods....

    HttpClient4.5全部jar包+简单实例

    这个压缩包包含了HttpClient 4.5所需的全部jar包,以及一个简单的实例`PTXCheckTools.java`,方便用户快速理解和应用。 HttpClient库的核心功能包括: 1. **HTTP协议支持**:HttpClient支持HTTP/1.1和HTTP/2协议,...

    Commons HTTPClient4&#46;X组件应用示例

    ##### 5.2 示例代码 ```java import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; public class HttpClientExample { public static void main(String[] ...

Global site tag (gtag.js) - Google Analytics