首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让HttpClient正确解码此站点

为了让HttpClient正确解码站点,我们需要确保以下几点:

  1. 设置正确的字符编码:HttpClient默认使用ISO-8859-1字符编码进行解码,但是很多网站使用的是UTF-8编码。我们需要通过设置字符编码来确保解码正确。可以使用以下代码示例:
代码语言:txt
复制
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.example.com");
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();

// 获取响应内容的字符编码
ContentType contentType = ContentType.getOrDefault(entity);
Charset charset = contentType.getCharset();

// 根据字符编码解码响应内容
String content = EntityUtils.toString(entity, charset);
  1. 处理压缩编码:有些网站会对响应内容进行压缩编码,例如Gzip或Deflate。我们需要对压缩编码进行解码,才能获取到正确的内容。可以使用以下代码示例:
代码语言:txt
复制
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.example.com");
httpGet.addHeader("Accept-Encoding", "gzip, deflate");
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();

// 解码响应内容
InputStream inputStream = entity.getContent();
Header contentEncoding = response.getFirstHeader("Content-Encoding");
if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) {
    inputStream = new GZIPInputStream(inputStream);
} else if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("deflate")) {
    inputStream = new InflaterInputStream(inputStream);
}

// 读取解码后的内容
String content = IOUtils.toString(inputStream, charset);
  1. 处理重定向:有些站点可能会返回重定向响应,我们需要处理重定向,以获取最终的内容。可以使用以下代码示例:
代码语言:txt
复制
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.example.com");
HttpResponse response = httpClient.execute(httpGet);

// 检查是否为重定向响应
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_MOVED_TEMPORARILY || statusCode == HttpStatus.SC_MOVED_PERMANENTLY
        || statusCode == HttpStatus.SC_SEE_OTHER || statusCode == HttpStatus.SC_TEMPORARY_REDIRECT) {
    // 获取重定向的URL
    Header locationHeader = response.getFirstHeader("Location");
    String redirectUrl = locationHeader.getValue();

    // 创建新的请求并执行
    httpGet = new HttpGet(redirectUrl);
    response = httpClient.execute(httpGet);
}

// 获取响应内容
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity, charset);

需要注意的是,以上代码示例中使用的是Apache HttpClient库进行HTTP请求。另外,为了解码响应内容,我们需要添加Apache Commons IO库和Apache HttpComponents库的依赖。

以上是让HttpClient正确解码站点的基本步骤和代码示例。根据实际情况和需求,可能还需要进行其他操作,例如处理Cookie、设置代理等。在实际开发中,可以根据具体的站点和需求进行调整和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何Apache HttpClient 支持SSL配置?

Apache HttpClient 4和5 支持不需要校验证书的接收SSL请求,后文将会介绍如何编写发送带证书的HTTPS请求的HttpClient工具类,以及个人如何在工作中实践工具类使用。...HttpClient 请求工具类:支持发送带证书的HTTPS 上面介绍的都是服务端如何跳过证书校验的HTTPS请求。 下面介绍如何发送带证书的HTTPS请求。...实战使用请求工具类 下面介绍如何将上面的工具类应用到个人日常工作流中。...小结 本教程讨论了如何为 Apache HttpClient 配置 SSL,以便它能够接收任何 HTTPS URL,而不受证书的影响。...这里记录一下人头疼的各种证书后缀。 (1) x.509 证书 X.509是常见通用的证书格式,包含证书持有人的公钥,加密算法等信息。

49610
  • 扫清盲点,如何正确的从HttpClient 3.x系统升级到HttpClient 4.x

    也是各种风格,虽然官方已经强烈建议使用HttpClient 4.x之后版本,但是在该项目中均存在HttpClient 3.x的和HttpClient 4.x的创建Httpclient对象。...关于HttpClient 3.x 和 HttpClient 4.x项目的历史 如下图所示: 原Commons HttpClient project(HttpClient 3.x) 是 Jakarta Commons...区分HttpClient 3.x 和 HttpClient 4.x 的jar包 如下图所示,如果是HttpClient 3.x 在项目中需要引入 import org.apache.commons.httpclient...HttpClient 3.x 和 4.x 超时Timeout设置变化: HttpClient 3.x HttpClient client = new HttpClient(); client.setConnectionTimeout...(5000); client.setTimeout(5000); HttpClient httpClient= new HttpClient(); httpClient.getHttpConnectionManager

    1.7K21

    单点登录

    其他站点需要登录时,利用HttpClient去登录站点登录,返回token保存到Cookie中 // LOGIN_WEB_URL登录站点的请求地址 public String login(String...username, String password, HttpServletResponse response) { // 请求参数,与HttpClient登录站点 Map<String...也客户端保存为Cookie,之后的访问对比自己Cookie中的singleToken与共享Session中的是否一致,不一致则有人登录了,踢出后者。...1之后,站点1拿这个ST去认证中心验证,正确则建立局部会话(Session),那么至此站点1是登录状态了。...用户这次访问需登录的站点2,重定向至认证中心(带上自己访问站点2的url),因为已经和认证中心建立全局会话,所以认证中心直接返回ST重定向回站点2,而站点2携带ST去认证中心验证,正确则建立局部会话 这里的局部会话关闭浏览器则会失效

    1.8K30

    salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesforce

    @HttpGet:曝光方法作为REST资源,当有Http get请求发送时,注解对应的方法会被执行;   3.@HttpPost:Http post 请求发送时,注解对应的方法会被执行;   4....@HttpDelete:当有Http delete请求发送时,注解对应的方法会被执行;   5.@HttpPut:当有Http put请求发送时,注解对应的方法会被执行;   6....@HttpPatch:当有Http patch请求发送时,注解对应的方法会被执行。...总结:本篇描述的主要是sfdc如何通过rest方式获取外部平台的资源以及sfdc如何作为rest service供外部平台调用,每个人的账号密码,以及custom key 和custom password...篇文章的缺点为没有考虑中文内容的问题,通过insert等方法存储到服务器会导致中文乱码现象,有需要的可以自行对数据进行编码解码处理。

    2.4K80

    Feign原理 (图解)_feign原理

    如何使用呢?可以通过@Resource注解,按照类型匹配(这里的类型为DemoClient接口类型),从Spring IOC容器找到这个代理实例,并且装配给需要的成员变量。...; // 是否解码404状态码?...如果是null,那最终执行默认的选项) executeAndDecode(template, options)执行发送Http请求,并且完成结果解码(包括正确状态码的解码和错误解码)。...null,就直接返回response;否则,就正常返回response.toBuilder().body(bodyData).build() body里面的内容吧 若200 <= 响应码 <= 300,表示正确的返回...从性能的角度而言,Apache HttpClient带有连接池的功能,具备优秀的HTTP连接的复用能力。关于带有连接池Apache HttpClient的性能提升倍数,具体可以参见后面的对比试验。

    3.7K40

    使用微服务架构思想,设计部署OAuth2.0授权认证框架

    本文的重点就是讲述如何在授权服务器和资源服务器相分离,甚至授权和认证服务器相分离的情况下,如何设计实现OAuth2.0的问题。...最后,对请求返回的响应结果做复杂的异常处理,得到正确的返回值或者异常结果。...//当前站点标记用户登录成功,并将访问令牌存储在当前站点的用户会话中 //当前用户下次访问别的站点的WebAPI的时候,携带访问令牌。...不过,为了跟B/S端统一,都使用密码模式,可以客户端程序直接访问授权服务器。...//当前站点标记用户登录成功,并将访问令牌存储在当前站点的用户会话中 //当前用户下次访问别的站点的WebAPI的时候,携带访问令牌。

    11K32

    HttpClient(二)HttpClient使用Ip代理与处理连接超时

    (3)支持 HTTPS 协议   (4)支持代理服务器等 一、HttpClient使用代理IP 1.1、前言   在爬取网页的时候,有的目标站点有反爬虫机制,对于频繁访问站点以及规则性访问站点的行为,会采集屏蔽...REMOTE_ADDR = Proxy IP     HTTP_VIA = not determined     HTTP_X_FORWARDED_FOR = not determined     可以看出来,高匿代理别人根本无法发现你是在用代理...一般我们搞爬虫 用的都是 高匿的代理IP;     那代理IP 从哪里搞呢 很简单 百度一下,你就知道 一大堆代理IP站点。 一般都会给出一些免费的,但是花点钱搞收费接口更加方便。...1.5、HttpClient连接超时及读取超时   httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间;   1)HttpClient连接时间     所谓连接的时候 是HttpClient...我们如何用代码实现呢?   HttpClient给我们提供了一个RequestConfig类 专门用于配置参数比如连接时间,读取时间以及前面讲解的代理IP等。

    2.6K80

    ajax 跨域请求api_java跨域请求的三种方法

    ---- 目录: (1)ajax跨域解决方案之代理机制实现原理 (2)ajax跨域解决方案之代理机制的代码实现 ---- (1)ajax跨域解决方案之代理机制实现原理 ajax请求访问servlet,...可以ajax请求跨域,通过直接本应用中的资源servlet,ajax可以不跨域访问本应用中的servlet,java程序发送Get,Post请求,来访问2号服务器中的的servlet 用java...response.getWriter().print("{\"username\":\"jackson\"}"); } } a站点需要servlet,首先需要加入servlet依赖: 引入架包...:httpclient架包 ProxyServlet:发送get请求,访问b站点TargerServlet,请求响应回来数据在进行响应 package com.bjpowernode.javaweb.servlet...(); // b站点响应回来的数据 response.getWriter().print(responseSB); } } ajax5.html:发送ajax请求

    72240

    SpringCloud升级之路2020.0.x版-33. 实现重试、断路器以及线程隔离源码

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在前面两节,我们梳理了实现 Feign 断路器以及线程隔离的思路,并说明了如何优化目前的负载均衡算法...但是如何更新负载均衡的数据缓存,以及实现重试、断路器以及线程隔离的源码还没提,这一节我们会详细分析。...实现的 OpenFeign 的 Client 接口的 Bean @Bean public ApacheHttpClient apacheHttpClient(HttpClient httpClient...url.getPort() + ":" + methodName; } } 在上面,我们定义了几种特殊的 HTTP 返回码,主要目的是想将一些异常封装成响应返回,然后通过我们后面 Feign 错误解码解码成统一的...GetMapping("/anything") HttpBinAnythingResponse anything(); } 下一节开始,我们会对这里实现的 FeignClient 封装进行单元测试,验证我们的正确

    38520

    七大主流的HttpClient程序比较

    HttpClient 1.支持连接池、多线程2.从官方demo可以看出httpClient只创建一次,被多个线程复用3.httpClient4.3后超时配置到request级 1.由于社区活跃度的问题...3.支持http24.Android4.4开始换成okHttp 1.使用时需要自己封装2.new OkHttpClient()每次使用都需要new出来(从晚上看到说作者可能是考虑可以忽略开销)3.超时配置在...没有连接池2.RestTemplate默认的http是HttpURLConnection openFeign 1.可插拔的注解支持,包括Feign注解和JAX-RS注解2.支持可插拔的HTTP编码器和解码器...3、Apache HttpClient 在Android中,AndroidSDK中集成了Apache的HttpClient模块,HttpClient就是一个增强版的HttpURLConnection,它只是关注于如何发送请求...支持可插拔的HTTP编码器和解码器(Gson,Jackson,Sax,JAXB,JAX-RS,SOAP)。 支持Hystrix和它的Fallback。 支持Ribbon的负载均衡。

    89420

    python高效解析json_4个小窍门,让你在Python中高效使用JSON!

    本文将主要分享以下内容:  · 如何载入、编写JSON?  · 如何在命令行上优化、校验JSON?  · 如何通过使用JMESPath对JSON文档执行高级查询?  1....JSON解码  Python自带一个功能强大、内容丰富的JSON库。可通过以下方式导入:  import json  解码JSON字符串很简单,直接输入 json.loads(…) 即可。...它可以转换成:  · 字典对象  · 列表数组  · 识别布尔值、整数、浮点数和字符串,在Python中进行正确转换。  · 任何 null 都将被转换为Python的None类型。  ...它能够你轻松地从JSON文档中获取所需数据。如果你用过JSON,就会觉得获取嵌套值并不难。  ...请严格按照交互式教程操作,同时也不要忘了在JMESPath站点上查看示例哦!  留言点赞关注  我们一起分享AI学习与发展的干货  如转载,请后台留言,遵守转载规范

    3K00
    领券