代码中用到的是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; } }
相关推荐
在IT行业中,HttpClient是一个非常重要的工具,特别是在网络编程和API交互...以上就是关于HttpClient简单示例的说明。通过学习和实践,你可以更好地掌握HttpClient的使用,为你的项目提供稳定可靠的网络通信解决方案。
在这个简单的示例中,我们将探讨如何使用HTTPClient进行基本的GET和POST请求。 首先,要使用HTTPClient,你需要在项目中引入相应的依赖。对于Java项目,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: `...
以下是一个简单的使用示例: ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache....
HttpClient是Apache基金会开发的一个HTTP客户端库,广泛应用于Java开发者中,用于执行HTTP...对于RESTful API,使用HttpClient则更为简单,只需构造合适的URL和请求体,然后按照HTTP方法(如GET、POST)进行操作即可。
`BasicCookieStore`是简单的内存实现。 六、安全通信与认证 1. `SSLContext`和`SSLSocketFactory`:用于配置和创建SSL/TLS连接,支持HTTPS通信。 2. `Credentials`和`AuthScope`:处理HTTP认证,`...
这个小例子中提供的项目源码应该包含了上述操作的示例代码,你可以直接导入并运行,以了解HttpClient的具体使用。通过学习和实践,你将能熟练掌握HttpClient在实际项目中的应用,如进行网页抓取、API调用等任务。
最后,通过`HttpClient`的`execute`方法发送请求并获取响应。 2. **Get请求**: Get请求是最简单的HTTP请求,用于从服务器获取资源。HttpClient中的`HttpGet`类可以用来创建GET请求。只需提供URL作为构造函数的...
Spring Boot 封装 HttpClient ...Spring Boot 提供了一个简单的方式来封装 HttpClient,用于实现请求重试机制和处理异常情况。同时,我们也可以使用 @Bean 注解将 HttpClient 封装成一个 Bean,用于在应用程序中使用。
这篇名为“简单的httpClient访问”的博文可能是介绍如何使用HttpClient进行基础的HTTP请求。HttpClient库提供了丰富的功能,包括GET、POST请求,设置请求头,处理响应,以及支持HTTPS等。接下来,我们将深入探讨...
压缩包中的`httpclient-4.0-alpha2.jar`文件包含了HttpClient库的所有类和方法,而`examples`文件可能包含了一些使用HttpClient的示例代码,帮助开发者更好地理解和使用这个库。通过这些示例,你可以学习如何构建...
- **灵活性**:与标准库提供的简单HTTP支持相比,HttpClient提供了更多高级特性,比如Cookie管理和自动重定向等,使得开发者可以更灵活地控制HTTP交互行为。 ##### 2.2 HttpClient的功能范围 - **HTTP协议支持**:...
要创建一个简单的HttpClient实例,你需要以下步骤: 1. 引入Apache HttpClient库: 在你的项目中,确保已经添加了Apache HttpClient的依赖。例如,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```...
以下是一个简单的Servlet示例,用于处理文件上传: ```java @WebServlet("/upload") public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse ...
以下是一个简单的HttpClient使用示例: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org....
《HttpClient 4.2.1:Java开发中的HTTP通信利器》 在Java开发领域,HttpClient是一个广泛使用的库,...无论是简单的GET请求还是复杂的POST操作,HttpClient都能游刃有余,为Java应用程序的网络通信带来极大的便利。
总结,`commons-httpclient-3.0.jar`在JAVA中的应用,不仅提供了一种简单易用的HTTP客户端实现,还具有丰富的特性和扩展性,对于理解和实现网络通信具有重要的学习价值。然而,随着技术的进步,开发者应关注并适时...
为了更好地理解HttpClient3.1的使用,以下是一个简单的示例,展示了如何使用GET方法获取网页内容: ```java import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods....
这个压缩包包含了HttpClient 4.5所需的全部jar包,以及一个简单的实例`PTXCheckTools.java`,方便用户快速理解和应用。 HttpClient库的核心功能包括: 1. **HTTP协议支持**:HttpClient支持HTTP/1.1和HTTP/2协议,...
##### 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[] ...