分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

HttpClient获取数据

发布时间:2023-09-06 01:41责任编辑:彭小芳关键词:暂无标签

  HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。如果只是需要向Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection完全可以胜任。但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不是通过一个简单的URL就可访问的,可能需要用户登录而且具有相应的权限才可访问该页面。在这种情况下,就需要涉及Session、Cookie的处理了,如果打算使用HttpURLConnection来处理这些细节,当然也是可能实现的,只是处理起来难度就大了。

  为了更好地处理向Web站点请求,包括处理Session、Cookie等细节问题,Apache开源组织提供了一个HttpClient项目,看它的名称就知道,它是一个简单的HTTP客户端(并不是浏览器),可以用于发送HTTP请求,接收HTTP响应。但不会缓存服务器的响应,不能执行HTML页面中嵌入的Javascript代码;也不会对页面内容进行任何解析、处理。

  简单来说,HttpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。

HttpClient的使用

使用HttpClient发送请求、接收响应很简单,只要如下几步即可。

  1.创建HttpClient对象。

  2.如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

  3.如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HttpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。

  4.调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法返回一个HttpResponse。

  5.调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

HttpGet方式获取数据

import org.apache.http.HttpEntity;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.CloseableHttpClient;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.util.EntityUtils;import java.io.IOException;public class HttpClientTest { ???public static void main(String[] args) { ???????CloseableHttpClient httpClient = HttpClientBuilder.create().build(); ???????RequestConfig config = RequestConfig.custom() ???????????????.setConnectTimeout(60000) ???????????????.setConnectionRequestTimeout(60000) ???????????????.setSocketTimeout(60000) ???????????????.build(); ???????HttpGet httpGet = new HttpGet("https://baike.baidu.com/item/httpclient/5766483?fr=aladdin"); ???????httpGet.setConfig(config); ???????CloseableHttpResponse response = null; ???????try { ???????????//执行httpGet请求 ???????????response = httpClient.execute(httpGet); ???????????System.out.println(response.getStatusLine().getStatusCode()); ???????????//获取响应实体 ???????????HttpEntity httpEntity = response.getEntity(); ???????????if (httpEntity != null) { ???????????????System.out.println("长度:\t" + httpEntity.getContentLength()); ???????????????System.out.println("内容:\t" + EntityUtils.toString(httpEntity,"UTF-8")); ???????????} ???????} catch (Exception e) { ???????????e.printStackTrace(); ???????} finally { ???????????try { ???????????????response.close(); ???????????????httpClient.close(); ???????????} catch (IOException e) { ???????????????e.printStackTrace(); ???????????} ???????} ???}}

HttpPost方式获取数据

@Test ???public void httpPost(){ ???????CloseableHttpClient httpClient = HttpClientBuilder.create().build(); ???????HttpPost post = new HttpPost("http://localhost:8080/Servlet/do_login.do"); ???????//设置post请求传递参数 ???????List<NameValuePair> list = new ArrayList<>(); ???????list.add(new BasicNameValuePair("username","test") ); ???????list.add(new BasicNameValuePair("password","admin")); ???????try { ???????????UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list); ???????????post.setEntity(entity); ???????}catch (Exception e){ ???????????e.printStackTrace(); ???????} ???????//执行请求并处理响应 ???????try{ ???????????CloseableHttpResponse response = httpClient.execute(post); ???????????HttpEntity httpEntity = response.getEntity(); ???????????if(httpEntity!=null){ ???????????????System.out.println(EntityUtils.toString(httpEntity,"UTF-8")); ???????????} ???????????response.close(); ???????}catch (Exception e){ ???????????e.printStackTrace(); ???????}finally { ???????????try { ???????????????httpClient.close(); ???????????} catch (IOException e) { ???????????????e.printStackTrace(); ???????????} ???????} ???}

  

 

HttpClient获取数据

原文地址:https://www.cnblogs.com/shirandedan/p/8423521.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved