`
jiayanjujyj
  • 浏览: 198413 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

监控Apache Httpclient的Http请求和返回

    博客分类:
  • JAVA
阅读更多

需求:

需要测试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

分享到:
评论

相关推荐

    httpClient官方文档

    - HTTP 协议拦截器(HTTP Protocol Interceptors):介绍了如何使用拦截器来修改和监控请求和响应。 6. 重定向处理(Redirect Handling) - 解释了HttpClient如何处理HTTP重定向的情况。 在连接管理(Connection...

    简单的HTTP功能监控功能(java httpclient-3.1)

    `httpclient-3.1`是Apache HttpClient的一个旧版本,它提供了丰富的功能来执行HTTP请求并处理响应,非常适合用于测试、监控或者集成到各种应用程序中检查HTTP服务的状态。 在描述中提到了一个博客链接,虽然内容...

    httpclient4.3 封装工具类

    HttpClient是Apache基金会开发的一个HTTP客户端库,主要用于处理HTTP请求。HttpClient 4.3版本是对该库的一次重要更新,提供了更多的功能和优化。这个封裝工具类是对HttpClient 4.3进行的二次开发,旨在简化HTTP请求...

    commons-httpclient3.1.jar,commons-codec1.3.jar,commons-logging1.1.1.jar

    HttpClient使用Commons Logging来记录其运行时信息,帮助开发者调试和监控HTTP请求的执行情况。 这些JAR文件在实际应用中通常是组合使用的。例如,一个Java应用程序如果需要通过HTTP与服务器进行交互,就可以依赖...

    httpclient-4.5.2.jar

    接着,`httpcore-4.4.4.jar`是HttpClient的核心运行时库,它提供了HTTP协议的基本实现,包括HTTP连接管理、请求和响应处理等基础功能。HttpCore库是HttpClient的基础,提供了低级别的网络通信接口,包括连接池管理、...

    基于httpclient的文件可配置的心跳检测应用

    【标题】"基于httpclient的文件可配置的心跳检测应用"是关于利用Apache HttpClient库进行网络连接健康检查和文件变化监控的技术实现。该应用适用于分布式系统中,确保服务间的通信可靠性,同时也关注本地或远程文件...

    HttpClientTest.txt

    Apache HttpClient是Apache HttpComponents项目的一部分,它为Java应用程序提供了高级API来发送HTTP请求并接收响应。HttpClient支持多种HTTP方法(GET、POST、PUT等),并提供了一种机制来处理重定向、cookie和身份...

    Httpclient所需jar包

    这是HttpClient的核心库,包含了执行HTTP和HTTPS请求的所有功能。它支持多种HTTP方法(GET、POST、PUT、DELETE等),可以设置请求头,处理Cookie,支持HTTP代理,还能进行身份验证。HttpClient库还提供了连接管理,...

    Android使用HttpClient实现上传下载功能并监控进度

    在Android开发中,HttpClient是一个常用的库,用于执行HTTP请求,如上传和下载数据。本教程将详细介绍如何利用HttpClient实现文件的上传与下载,并且实时监控进度,以便在UI上显示进度条。 首先,理解HttpClient的...

    httpclient3个jar包

    在HttpClient中,这个库用于记录HTTP客户端执行过程中的各种信息,帮助开发者调试和监控HTTP请求的执行情况。引入commons-logging.jar后,只需配置相应的日志实现,就可以控制日志的输出。 3. **commons-codec-1.3....

    httpClient采集jsoup解析

    首先,让我们了解下Apache HttpClient。HttpClient是一个标准的Java库,它允许开发者执行HTTP请求并获取响应,支持各种HTTP协议特性,如GET、POST、PUT等。使用HttpClient,你可以创建一个HTTP连接管理器,设置请求...

    HttpClient 功能jar包

    在HttpClient中,通过commons-logging,开发者可以方便地控制和记录HTTP操作的日志信息,这对于调试和监控应用程序的行为非常有用。由于它是抽象层,更换日志框架只需要更改配置,而无需修改代码。 在实际使用...

    httpClient 调用远程接口 获取数据到本地文件夹

    保持良好的代码结构,例如使用Builder模式来构建复杂的HttpClient请求,工厂模式来创建解析器,以及单例模式来管理HttpClient实例。遵循SOLID原则,确保代码的可维护性和扩展性。 通过上述步骤,我们可以构建一个...

    HttpClient 4.2.1版本

    HttpClient是Apache软件基金会的一个开源项目,提供了一个强大的、高度可定制的HTTP客户端API,用于处理HTTP协议相关的请求和响应。HttpClient 4.2.1版本是这个库的一个更新,主要包含了一些新特性、性能优化以及对...

    用httpclient-4.0-alpha2 打造基于http协议的网站分析器

    4. **请求和响应处理**:如何构造HttpGet和HttpPost对象,添加请求参数,以及处理返回的HttpResponse,包括提取响应体、解析HTML等。 5. **异常处理**:在发送请求和处理响应时,可能会遇到网络错误、超时等问题,...

    HttpClient模拟客户端传输文件

    Apache HttpClient是一个开源的Java库,提供了全面的HTTP协议支持,包括HTTP/1.1和HTTP/2。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.httpcomponents &lt;artifactId&gt;...

    HttpClient封装工具

    HttpClient是Apache基金会开发的一个HTTP客户端库,广泛应用于Java领域,用于执行HTTP和HTTPS请求。在Spring框架中,我们可以将HttpClient进行封装,以便更好地利用其功能并整合到Spring的应用上下文中。下面将详细...

    httpclient工具

    HTTPClient是由Apache基金会开发的一个开源库,它提供了强大的功能来执行HTTP请求,包括GET、POST、PUT等多种HTTP方法。对于POST请求,它是向服务器发送数据的主要方式,常用于提交表单、上传文件等场景。在...

    httpClient jar包

    4. **HttpResponse**:当HttpClient执行请求后,会返回一个HttpResponse对象,其中包含了服务器的响应状态码、响应头和响应体。 5. **HttpEntity**:表示HTTP消息的实体部分,可以包含请求或响应的数据。常用的实现...

    用httpclient开发的在线自动抢订火车票系统

    在线自动抢订火车票系统是基于HTTP协议的网络应用程序,主要利用了Apache HttpClient库来实现对火车票购票网站的模拟访问和数据提交。HttpClient是一个强大的Java客户端HTTP编程库,它提供了一种优雅的方式处理HTTP...

Global site tag (gtag.js) - Google Analytics