需求:
需要测试API,而实际上整个流程需要跳转到第三方网站让用户登录和授权。因此需要模拟这个过程
解决:
使用selenium的HtmlUnitDriver,由于项目中使用了selenium,也可以直接使用HtmlUnit。
问题:
从第三方网站授权完后,重定向到自己网站后,会设置把第三方网站返回的信息放到session中。结果丢失。
分析:
因为在跳转到第三方网站之前,使用HttpClient调用了网站的API去做登录等操作,而HtmlUnit里面也会有一个自己的HttpClient,因此判断在重定向之后Cookie丢失。
为了验证分析正确,需要监控一下HttpClient发出的请求和得到的返回信息。
解决方案:
使用Fiddler,之前只是知道Fiddler可以监控Http的请求和返回消息。其实Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1, 端口:8888. 因此可以给HttpClient的代理设为Fiddler就可以监控了。
在Fiddler的左下角可以选择Non-Browser来过滤只显示非浏览器的请求。
HttpHost proxy = new HttpHost("127.0.0.1", 8888);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
同时给HtmlUnitDriver也设为相同的代理就可以监控了。发现分析的是正确的。
因此在使用HtmlUnitDriver和结束时需要相互设置Cookie。
public static class ODHtmlUnitDriver extends HtmlUnitDriver {
public ODHtmlUnitDriver(Capabilities capabilities) {
super(capabilities);
}
public void setCookieToHttpClient(DefaultHttpClient httpClient) {
Set<Cookie> cookies = getWebClient().getCookieManager().getCookies();
org.apache.http.cookie.Cookie [] httpClientCookies = Cookie.toHttpClient(cookies);
for (org.apache.http.cookie.Cookie cookie : httpClientCookies) {
httpClient.getCookieStore().addCookie(cookie);
}
}
public void setCookieFromHttpClient(DefaultHttpClient httpClient) {
List<org.apache.http.cookie.Cookie> httpClientCookies = httpClient.getCookieStore().getCookies();
List<Cookie> cookies = Cookie.fromHttpClient(httpClientCookies);
for (Cookie cookie : cookies) {
getWebClient().getCookieManager().addCookie(cookie);
}
}
}
HtmlUnit也提供了函数在自己的Cookie和HttpClient的Cookie直接进行转换。
详细的解释了Fiddler的使用,强悍啊。。。
http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html
分享到:
相关推荐
- HTTP 协议拦截器(HTTP Protocol Interceptors):介绍了如何使用拦截器来修改和监控请求和响应。 6. 重定向处理(Redirect Handling) - 解释了HttpClient如何处理HTTP重定向的情况。 在连接管理(Connection...
`httpclient-3.1`是Apache HttpClient的一个旧版本,它提供了丰富的功能来执行HTTP请求并处理响应,非常适合用于测试、监控或者集成到各种应用程序中检查HTTP服务的状态。 在描述中提到了一个博客链接,虽然内容...
HttpClient是Apache基金会开发的一个HTTP客户端库,主要用于处理HTTP请求。HttpClient 4.3版本是对该库的一次重要更新,提供了更多的功能和优化。这个封裝工具类是对HttpClient 4.3进行的二次开发,旨在简化HTTP请求...
HttpClient使用Commons Logging来记录其运行时信息,帮助开发者调试和监控HTTP请求的执行情况。 这些JAR文件在实际应用中通常是组合使用的。例如,一个Java应用程序如果需要通过HTTP与服务器进行交互,就可以依赖...
接着,`httpcore-4.4.4.jar`是HttpClient的核心运行时库,它提供了HTTP协议的基本实现,包括HTTP连接管理、请求和响应处理等基础功能。HttpCore库是HttpClient的基础,提供了低级别的网络通信接口,包括连接池管理、...
【标题】"基于httpclient的文件可配置的心跳检测应用"是关于利用Apache HttpClient库进行网络连接健康检查和文件变化监控的技术实现。该应用适用于分布式系统中,确保服务间的通信可靠性,同时也关注本地或远程文件...
Apache HttpClient是Apache HttpComponents项目的一部分,它为Java应用程序提供了高级API来发送HTTP请求并接收响应。HttpClient支持多种HTTP方法(GET、POST、PUT等),并提供了一种机制来处理重定向、cookie和身份...
这是HttpClient的核心库,包含了执行HTTP和HTTPS请求的所有功能。它支持多种HTTP方法(GET、POST、PUT、DELETE等),可以设置请求头,处理Cookie,支持HTTP代理,还能进行身份验证。HttpClient库还提供了连接管理,...
在Android开发中,HttpClient是一个常用的库,用于执行HTTP请求,如上传和下载数据。本教程将详细介绍如何利用HttpClient实现文件的上传与下载,并且实时监控进度,以便在UI上显示进度条。 首先,理解HttpClient的...
在HttpClient中,这个库用于记录HTTP客户端执行过程中的各种信息,帮助开发者调试和监控HTTP请求的执行情况。引入commons-logging.jar后,只需配置相应的日志实现,就可以控制日志的输出。 3. **commons-codec-1.3....
首先,让我们了解下Apache HttpClient。HttpClient是一个标准的Java库,它允许开发者执行HTTP请求并获取响应,支持各种HTTP协议特性,如GET、POST、PUT等。使用HttpClient,你可以创建一个HTTP连接管理器,设置请求...
在HttpClient中,通过commons-logging,开发者可以方便地控制和记录HTTP操作的日志信息,这对于调试和监控应用程序的行为非常有用。由于它是抽象层,更换日志框架只需要更改配置,而无需修改代码。 在实际使用...
保持良好的代码结构,例如使用Builder模式来构建复杂的HttpClient请求,工厂模式来创建解析器,以及单例模式来管理HttpClient实例。遵循SOLID原则,确保代码的可维护性和扩展性。 通过上述步骤,我们可以构建一个...
HttpClient是Apache软件基金会的一个开源项目,提供了一个强大的、高度可定制的HTTP客户端API,用于处理HTTP协议相关的请求和响应。HttpClient 4.2.1版本是这个库的一个更新,主要包含了一些新特性、性能优化以及对...
4. **请求和响应处理**:如何构造HttpGet和HttpPost对象,添加请求参数,以及处理返回的HttpResponse,包括提取响应体、解析HTML等。 5. **异常处理**:在发送请求和处理响应时,可能会遇到网络错误、超时等问题,...
Apache HttpClient是一个开源的Java库,提供了全面的HTTP协议支持,包括HTTP/1.1和HTTP/2。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache.httpcomponents <artifactId>...
HttpClient是Apache基金会开发的一个HTTP客户端库,广泛应用于Java领域,用于执行HTTP和HTTPS请求。在Spring框架中,我们可以将HttpClient进行封装,以便更好地利用其功能并整合到Spring的应用上下文中。下面将详细...
HTTPClient是由Apache基金会开发的一个开源库,它提供了强大的功能来执行HTTP请求,包括GET、POST、PUT等多种HTTP方法。对于POST请求,它是向服务器发送数据的主要方式,常用于提交表单、上传文件等场景。在...
4. **HttpResponse**:当HttpClient执行请求后,会返回一个HttpResponse对象,其中包含了服务器的响应状态码、响应头和响应体。 5. **HttpEntity**:表示HTTP消息的实体部分,可以包含请求或响应的数据。常用的实现...
在线自动抢订火车票系统是基于HTTP协议的网络应用程序,主要利用了Apache HttpClient库来实现对火车票购票网站的模拟访问和数据提交。HttpClient是一个强大的Java客户端HTTP编程库,它提供了一种优雅的方式处理HTTP...