`
namezhou
  • 浏览: 158620 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ApacheClient模拟浏览器GET和POST请求

 
阅读更多

ApacheClient简介
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.1.

模拟GET请求

HttpClient client = new DefaultHttpClient();
			//get..........get the login page
			String getUrl = "http://124.130.149.167:8888/nroa";
			HttpGet get = new HttpGet(getUrl);
			//execute get connection
			HttpResponse response = client.execute(get);
			if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				//request success
				String strResult = EntityUtils.toString(response.getEntity());
			}else{
				System.out.println("Error code:"
						+response.getStatusLine().getStatusCode());
			}

模拟post请求
//post...post the username and password to login
			String postUrl = "http://124.130.149.167:8888/nroa/checkLogin.do";
			HttpPost post = new HttpPost(postUrl);
			List<NameValuePair> params = new ArrayList<NameValuePair>();
			NameValuePair username = new BasicNameValuePair("USER_ID","test");
			NameValuePair password = new BasicNameValuePair("PASSWORD","1111");
			params.add(username);
			params.add(password);
			HttpEntity entity = new UrlEncodedFormEntity(params,"GBK");
			post.setEntity(entity);
			response = client.execute(post);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				//request success
				String strResult = EntityUtils.toString(response.getEntity());
			}else{
				System.out.println("Error code:"
						+response.getStatusLine().getStatusCode());
			}

 常见问题:
1.post后由于页面发生跳转(比如由login.do跳转到main.jsp)
由于技术限制,以及为保证2.0发布版API的稳定,HttpClient还不能自动处重定向,但对重定向到同一主机、同一端口且采用同一协议的情况HttpClient可以支持。不能自动的处理的情况,包括需要人工交互的情况,或超出httpclient的能力。
  当服务器重定向指令指到不同的主机时,HttpClient只是简单地将重定向状态码作为应答状态。所有的300到399(包含两端)的返回码,都表示是重定向应答。常见的有:
1. 301 永久移动. HttpStatus.SC_MOVED_PERMANENTLY
2. 302 临时移动. HttpStatus.SC_MOVED_TEMPORARILY
3. 303 See Other. HttpStatus.SC_SEE_OTHER
4. 307 临时重定向. HttpStatus.SC_TEMPORARY_REDIRECT

解决方案:在请求提交后再执行一次请求(如向login.do提交post请求后,再发送一次到main.jsp的get请求),代码如下:

if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				//request success
				String strResult = EntityUtils.toString(response.getEntity());
			}if(response.getStatusLine().getStatusCode()==HttpStatus.SC_MOVED_TEMPORARILY){
				//login success,redirected,get the target url
				post.abort();//release the post connection 这句很重要
				String turl = response.getLastHeader("Location").getValue();
				//get to the main page after logining...
				get = new HttpGet(turl);
				response = client.execute(get);
				if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
}
}

 

 

分享到:
评论

相关推荐

    JAVA-用HttpClient来模拟浏览器GET,POST.docx

    JAVA使用HttpClient模拟浏览器GET、POST请求 在本文中,我们将介绍如何使用Apache Commons HttpClient库来模拟浏览器的GET和POST请求。HttpClient库是一个开放源码的项目,是Apache Commons项目的一部分,旨在简化...

    用HttpClient来模拟浏览器GET_POST

    使用HttpClient来模拟浏览器GET_POST HttpClient是一个Apache开源组织中的项目,隶属于Jakarta的commons项目,旨在简化HTTP客户端与服务器进行各种通讯编程。通过使用HttpClient,可以轻松地解决以前很头疼的事情,...

    java web中 HttpClient模拟浏览器登录后发起请求

    在上面的代码中,我们首先使用 HttpPost 方法模拟浏览器登录到服务器,然后使用 HttpGet 方法请求需要的资源。在整个过程中,我们使用的是 DefaultHttpClient 对象,并使用 PoolingClientConnectionManager 来管理...

    模拟Http请求

    本文详细介绍了如何使用Apache HttpClient库在Java中模拟发送Http GET和POST请求的方法。通过这种方式,可以在开发过程中高效地进行测试、调试等工作。同时,Apache HttpClient还提供了更多高级功能,如SSL/TLS支持...

    java模拟ie 访问web

    GET请求用于获取资源,POST请求常用于提交表单数据。 3. **请求配置**:在发送请求前,我们可以设置各种参数,如超时时间、重试策略、连接池等。 4. **执行请求**:使用HttpClient的`execute`方法发送请求,并得到...

    java httpclient 模拟登录

    在Java编程中,HttpClient库是Apache提供的一款强大的HTTP客户端工具,用于执行HTTP请求,包括GET、POST、PUT等多种HTTP方法。...对于更复杂的情况,可能需要使用HTMLUnit或Selenium等工具进行浏览器级别的模拟登录。

    Android应用源码之31.模拟Http请求(.zip

    然后,使用HttpURLConnection发送GET或POST请求: ```java URL url = new URL("http://example.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod(...

    java-httputil.rar

    以下是一个使用OkHttp发送POST请求的例子: ```java OkHttpClient client = new OkHttpClient(); RequestBody formBody = new FormBody.Builder() .add("key1", "value1") .build(); Request request = new ...

    JAVA开发一个简单的爬虫的思路2.doc

    在Java开发中,创建一个简单的网络爬虫是一个...通过HttpWatch等工具分析HTTP交互,结合HttpClient发送GET和POST请求,可以构建起基本的网络爬虫框架。随着项目复杂性的增加,你需要掌握更多高级技巧,以应对各种挑战。

    java+restful+Jersey+webservice 远程调用

    - 也可以使用Jersey提供的客户端API,如`Client`和`WebTarget`,它们提供了更友好的接口来构建和执行请求。 5. **JSON序列化与反序列化**: - RESTful服务通常使用JSON格式交换数据,因此需要处理JSON的序列化和...

    详解WEB页面400错误

    如果必须传递大量数据,考虑使用POST请求或者将数据转换为查询字符串以外的形式,比如JSON格式。 2. **调整服务器配置**:针对Nginx等服务器,可以修改配置文件,增加`client_header_buffer_size`和`large_client_...

    web server and browser

    客户端(浏览器)方面,虽然我们不能直接编写浏览器,但可以理解其工作原理,例如使用HTTP库(如Apache HttpClient)模拟浏览器行为,向服务器发送请求并接收响应。 了解Web服务器与浏览器的交互对于开发Web应用至...

    http客户端相关jar包

    在Java中,HTTP客户端库是用来模拟浏览器行为,发送HTTP请求和处理响应的工具。它们提供了API,使得开发者可以方便地创建和发送HTTP请求,获取服务器的响应,并进行各种操作,如解析响应体、处理头信息等。 3. **...

    java爬取工具httpunit全部jar包(包含httpunit使用需要的全部jar包)

    1. **发送HTTP请求**:HttpUnit可以模拟浏览器向服务器发送GET、POST和其他类型的HTTP请求,允许你设置各种请求头和参数,以便精确控制请求行为。 2. **处理响应**:接收到服务器响应后,HttpUnit可以解析HTML、XML...

    java爬虫所需要的包

    在Java爬虫中,你需要这个库来发送GET和POST请求,获取网页内容,这通常是爬虫的第一步。`httpcomponents-client-4.3.1`提供了许多高级功能,如连接管理、重试策略、身份验证和 Cookie 管理,这些都是构建高效和可靠...

    java模拟登陆

    该库提供了强大的功能来处理HTTP请求和响应,如POST请求的构建、设置请求头等。 #### 日志记录 日志记录是软件开发中非常重要的一部分,它有助于调试和追踪问题。本代码中使用了Apache Commons Logging进行日志...

    HttpClient Access to HTML Form

    使用HttpClient,开发者可以模拟浏览器行为,对网页进行爬取或自动化测试。以下是一些关键知识点: 1. **HttpClient实例化**:首先,你需要创建一个HttpClient实例,这通常是通过HttpClientBuilder或...

    HttpClient抓取网页Demo

    HttpClient允许你模拟浏览器行为,发送GET、POST以及其他HTTP方法的请求,并处理服务器返回的各种内容,包括HTML、XML、JSON等。在本文中,我们将深入探讨HttpClient的基本用法,以及如何使用它来抓取网页内容。 ...

    web服务器客户端实例

    3. **GET和POST请求**:GET用于获取资源,其参数显示在URL中;POST用于向服务器提交数据,常用于表单提交,参数隐藏在请求体中。 4. **Web服务器配置**:涉及到端口设置、域名绑定、虚拟主机、日志记录、安全设置等...

Global site tag (gtag.js) - Google Analytics