HttpComponents 重定向问题分析和解决
一、 起因:
最近在学习使用HttpComponents登陆网站,这样的登陆毫无疑问使用的是post方法提交。
但是在登录的过程中,有的会返回302状态代码。这是因为该网站使用了重定向链接造成的。
于是开始了漫长的查阅资料的过程。
二、 过程:
国内关于HttpComponents处理302状态问题的例子不多,基本上都是一些简单的例子或者API的翻译。
后来去google搜索,才解决了问题。
三、 解决方法:
1. 原因所在:
httpcomponents 在处理重定向问题时,默认的情况下是有限制的:
对于 HEAD 和 GET 方法, HttpComponents 会自动做重定向处理;
对于 POST 和 PUT 方法, HttpComponents 不会进行自动重定向处理,这需要用户自己设定才行。
下面是 DefaultRedirectStrategy 中的描述:
Default implementation of RedirectStrategy
. This strategy honors the restrictions on automatic redirection of entity enclosing methods such as POST and PUT imposed by the HTTP specification. 302 Moved Temporarily, 301 Moved Permanently and 307 Temporary Redirect status codes will result in an automatic redirect of HEAD and GET methods only. POST and PUT methods will not be automatically redirected as requiring user confirmation.
The restriction on automatic redirection of POST methods can be relaxed by using LaxRedirectStrategy
instead of DefaultRedirectStrategy
.
在这段描述中可以知道, 想要使 POST 和 PUT 方法可以自动处理重定向链接,使用 LaxRedirectStrategy 类即可。
2. 代码的用法:
DefaultHttpClient client = new DefaultHttpClient(); LaxRedirectStrategy redirectStrategy = new LaxRedirectStrategy(); // 设定自己需要的重定向策略 client.setRedirectStrategy(redirectStrategy); // 创建登陆form List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("username", USERNAME)); formparams.add(new BasicNameValuePair("password", PASSWORD)); UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(formparams, "UTF-8"); // 创建登陆请求 HttpPost loginPost = new HttpPost(URL_LOGIN); loginPost.setEntity(formEntity); // 执行请求, // 在使用默认的重定向策略是,状态代码返回的是 302 // 使用了重定向策略后, 状态代码返回的是 200 HttpResponse loginResponse = client.execute(loginPost); System.out.println("登录请求放回状态代码: " + loginResponse.getStatusLine().getStatusCode());
相关推荐
3. HttpClient-Android:专为Android平台优化的版本,考虑了Android设备的资源限制和特殊环境,提供了一种更加稳定、省电的HTTP通信解决方案。 4. HttpAsyncClient:对于需要异步处理HTTP请求的场景,...
无论是简单的GET请求,还是复杂的文件上传、下载,甚至涉及身份验证和安全性的操作,HTTPComponents Client都能提供可靠的解决方案。对于任何需要与HTTP服务器交互的Java应用,HTTPComponents Client 4.2.5都是一个...
在实际开发中,HttpComponents的灵活性和强大功能得到了广泛应用。例如,在Web爬虫项目中,HttpClient可以帮助我们高效地抓取网页内容;在微服务架构中,HttpClient可以作为服务间通信的工具,确保请求的可靠性和...
12. **错误处理和调试**:库提供了详细的日志记录和异常处理机制,方便开发者定位和解决问题。 总之,`httpcomponents-core-4.4.4`是HTTP通信的强力工具,无论是在简单的HTTP请求还是复杂的网络应用中,都能提供...
Httpcomponents 是Apache Jakarta 項目的一個子項目 HttpComponents项目是HTTP协议的几个方面的底层库。在服务器或客户端通讯有高级需求的用户可能发现,对于建构定制的HTTP协议服务,这是一个有用的工具集
httpcomponents-jar包;httpcomponents-jar包;httpcomponents-jar包;httpcomponents-jar包;httpcomponents-jar包;httpcomponents-jar包
3. **数据抓取与上传**:无论是下载文件还是上传数据,HTTPComponents Client都能提供稳定且高效的解决方案。 三、压缩包内容详解 "httpcomponents-client-4.2.5-bin"压缩包内包含了以下关键组件: - `lib`目录:...
标题中的"httpcomponents-client-4.5.6.rar"是一个压缩包文件,它是Apache HttpComponents项目的客户端组件的一个版本,具体是4.5.6版。HttpComponents是Java领域中用于处理HTTP协议的重要库,它提供了对HTTP协议的...
HttpClient允许开发者自定义请求头、设置超时、处理重定向、管理cookies等,为构建网络应用提供了灵活性和控制力。 2. **Connection Management**:HttpClient 4.5.1引入了高效的连接管理机制,包括连接池...
同时,由于其广泛使用和成熟的社区支持,遇到问题时往往能找到丰富的解决方案和示例代码。总的来说,HttpComponents是Java世界中一个强大的HTTP客户端工具,为开发者提供了灵活且高效地与HTTP服务器交互的能力。
HttpComponents Core 4.1.3版本主要关注稳定性和性能优化,包括修复了一些已知的问题,增强了对HTTP/1.1协议的遵守,以及提升了连接管理的效率。此外,还可能包含对新特性的支持,如HTTP/2的初步支持,尽管不完全。 ...
Elasticsearch作为一个强大的分布式搜索引擎,广泛应用于数据存储、检索和分析。为了更好地利用Elasticsearch的功能,Java开发者通常会使用其提供的客户端来构建应用程序。其中,Java Low Level REST Client(简称...
总的来说,HttpComponents为Java开发者提供了全面的HTTP解决方案,无论是在简单的HTTP请求还是复杂的网络交互中,都能发挥出强大的能力。掌握HttpComponents的使用,无疑是提升Java应用网络性能的重要步骤。
本篇文章将详细介绍HTTPComponents Client包及其核心组件HttpClient和HttpGet方法。 HTTPComponents Client是Apache的一个开源项目,它是一个强大的HTTP客户端实现,支持HTTP/1.1和部分HTTP/2协议。这个库为开发者...
本次我们聚焦于其客户端组件的4.5.12版本,通过解压缩文件"**httpcomponents-client-4.5.12.zip**",我们可以深入探讨这个库的核心功能和应用场景。 **一、HttpComponents Client概述** Apache HttpComponents ...
HttpCore 4.2.1是HttpComponents项目的核心组件,它包含了一组低级别的HTTP协议处理类和接口。这个版本主要关注性能优化和bug修复,旨在提高HTTP请求和响应处理的效率。它支持HTTP/1.1协议,并且提供了非阻塞I/O模型...
HTTPComponents Client是Apache HttpClient的升级版,它主要由两个部分组成:Core模块和HttpClient模块。Core模块提供了基础的HTTP协议处理功能,而HttpClient模块则构建在其上,提供了更高级的HTTP客户端服务,如...
同时,使用 Commons Logging 可以灵活地调整日志输出,便于问题排查和性能分析。 标签"client"表明这些库主要面向客户端应用,通常与服务器端的HTTP服务器组件(如Apache Tomcat、Jetty等)相对,用于实现客户端...
4.5.12是这个版本的特定版本号,意味着它包含了自4.5系列以来的所有修复和改进。此压缩包`httpcomponents-client-4.5.12-bin.zip`包含了运行HTTPClient 4.5所需的多个JAR文件。 以下是这些JAR文件的功能和在HTTP...