HttpClient3.x之Get请求和Post请求示例


HttpClient的支持在HTTP/1.1规范中定义的所有的HTTP方法:GET, HEAD, POST, PUT, DELETE, TRACE 和 OPTIONS。每有一个方法都有一个对应的类:HttpGet,HttpHead,HttpPost,HttpPut,HttpDelete,HttpTrace和HttpOptions。所有的这些类均实现了HttpUriRequest接口,故可以作为execute的执行参数使用。请求URI是能够应用请求的统一资源标识符。 HTTP请求的URI包含一个协议计划protocol scheme,主机名host name,,可选的端口optional port,资源的路径resource path,可选的查询optional query和可选的片段optional fragment。

 

head,put,delete,trace HttpClient支持这些方法,
大多数浏览器不支持这些方法,原因是Html 4中对 FORM 的method方法只支持两个get和post,很多浏览器还都依然是基于html4的。

 

通常会在Java中通过代码调用URL进行远端方法调用,这些方法有的是Get请求方式的,有的是POST请求方式的,为此,总结一例,贴出以便查阅。

依赖JAR包有:commons-codec.jar,commons-httpclient.jar,commons-logging.jar。

  1. package com.wujintao.httpclient;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5.   
  6. import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;  
  7. import org.apache.commons.httpclient.HttpClient;  
  8. import org.apache.commons.httpclient.HttpException;  
  9. import org.apache.commons.httpclient.HttpStatus;  
  10. import org.apache.commons.httpclient.NameValuePair;  
  11. import org.apache.commons.httpclient.methods.GetMethod;  
  12. import org.apache.commons.httpclient.methods.PostMethod;  
  13. import org.apache.commons.httpclient.params.HttpMethodParams;  
  14. import org.junit.Test;  
  15.   
  16. public class TestCase {  
  17.   
  18.     @Test  
  19.     public void testGetRequest() throws IllegalStateException, IOException {  
  20.         HttpClient client = new HttpClient();  
  21.         StringBuilder sb = new StringBuilder();  
  22.         InputStream ins = null;  
  23.         // Create a method instance.  
  24.         GetMethod method = new GetMethod("http://www.baidu.com");  
  25.         // Provide custom retry handler is necessary  
  26.         method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,  
  27.                 new DefaultHttpMethodRetryHandler(3false));  
  28.         try {  
  29.             // Execute the method.  
  30.             int statusCode = client.executeMethod(method);  
  31.             System.out.println(statusCode);  
  32.             if (statusCode == HttpStatus.SC_OK) {  
  33.                 ins = method.getResponseBodyAsStream();  
  34.                 byte[] b = new byte[1024];  
  35.                 int r_len = 0;  
  36.                 while ((r_len = ins.read(b)) > 0) {  
  37.                     sb.append(new String(b, 0, r_len, method  
  38.                             .getResponseCharSet()));  
  39.                 }  
  40.             } else {  
  41.                 System.err.println("Response Code: " + statusCode);  
  42.             }  
  43.         } catch (HttpException e) {  
  44.             System.err.println("Fatal protocol violation: " + e.getMessage());  
  45.         } catch (IOException e) {  
  46.             System.err.println("Fatal transport error: " + e.getMessage());  
  47.         } finally {  
  48.             method.releaseConnection();  
  49.             if (ins != null) {  
  50.                 ins.close();  
  51.             }  
  52.         }  
  53.         System.out.println(sb.toString());  
  54.     }  
  55.   
  56.     @Test  
  57.     public void testPostRequest() throws HttpException, IOException {  
  58.         HttpClient client = new HttpClient();  
  59.         PostMethod method = new PostMethod("http://www.baidu.com/getValue");  
  60.         method.setRequestHeader("Content-Type",  
  61.                 "application/x-www-form-urlencoded;charset=gb2312");  
  62.         NameValuePair[] param = { new NameValuePair("age""11"),  
  63.                 new NameValuePair("name""jay"), };  
  64.         method.setRequestBody(param);  
  65.         int statusCode = client.executeMethod(method);  
  66.         System.out.println(statusCode);  
  67.         method.releaseConnection();  
  68.     }  
  69.   
  70. }  
package com.wujintao.httpclient;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.junit.Test;

public class TestCase {

	@Test
	public void testGetRequest() throws IllegalStateException, IOException {
		HttpClient client = new HttpClient();
		StringBuilder sb = new StringBuilder();
		InputStream ins = null;
		// Create a method instance.
		GetMethod method = new GetMethod("http://www.baidu.com");
		// Provide custom retry handler is necessary
		method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
				new DefaultHttpMethodRetryHandler(3, false));
		try {
			// Execute the method.
			int statusCode = client.executeMethod(method);
			System.out.println(statusCode);
			if (statusCode == HttpStatus.SC_OK) {
				ins = method.getResponseBodyAsStream();
				byte[] b = new byte[1024];
				int r_len = 0;
				while ((r_len = ins.read(b)) > 0) {
					sb.append(new String(b, 0, r_len, method
							.getResponseCharSet()));
				}
			} else {
				System.err.println("Response Code: " + statusCode);
			}
		} catch (HttpException e) {
			System.err.println("Fatal protocol violation: " + e.getMessage());
		} catch (IOException e) {
			System.err.println("Fatal transport error: " + e.getMessage());
		} finally {
			method.releaseConnection();
			if (ins != null) {
				ins.close();
			}
		}
		System.out.println(sb.toString());
	}

	@Test
	public void testPostRequest() throws HttpException, IOException {
		HttpClient client = new HttpClient();
		PostMethod method = new PostMethod("http://www.baidu.com/getValue");
		method.setRequestHeader("Content-Type",
				"application/x-www-form-urlencoded;charset=gb2312");
		NameValuePair[] param = { new NameValuePair("age", "11"),
				new NameValuePair("name", "jay"), };
		method.setRequestBody(param);
		int statusCode = client.executeMethod(method);
		System.out.println(statusCode);
		method.releaseConnection();
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HttpClient 是一个开源的 HTTP 客户端库,用于发送 HTTP 请求和接收响应。它提供了一系列的方法来发送 GET 和 POST 请求,并设置请求头。 以下是使用 HttpClient 发送 GET 请求示例代码: ```java import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; public class HttpClientExample { public static void main(String[] args) { HttpClient httpClient = HttpClientBuilder.create().build(); try { URI uri = new URI("http://example.com/api"); HttpGet getRequest = new HttpGet(uri); // 设置请求头 getRequest.addHeader("User-Agent", "Mozilla/5.0"); HttpResponse response = httpClient.execute(getRequest); // 处理响应 System.out.println(response.getStatusLine().getStatusCode()); // 其他处理逻辑... } catch (URISyntaxException | IOException e) { e.printStackTrace(); } } } ``` 以上示例中,我们创建了一个 HttpClient 对象,并使用 `HttpGet` 请求发送 GET 请求。然后,我们通过 `addHeader` 方法设置了请求头中的 User-Agent 字段,模拟了一个浏览器的 User-Agent。最后,使用 `httpClient.execute(getRequest)` 方法发送请求并获取响应。 以下是使用 HttpClient 发送 POST 请求示例代码: ```java import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; public class HttpClientExample { public static void main(String[] args) { HttpClient httpClient = HttpClientBuilder.create().build(); try { URI uri = new URI("http://example.com/api"); HttpPost postRequest = new HttpPost(uri); // 设置请求postRequest.addHeader("Content-Type", "application/json"); // 设置请求体 StringEntity requestBody = new StringEntity("{\"key\":\"value\"}"); postRequest.setEntity(requestBody); HttpResponse response = httpClient.execute(postRequest); // 处理响应 System.out.println(response.getStatusLine().getStatusCode()); HttpEntity responseEntity = response.getEntity(); String responseString = EntityUtils.toString(responseEntity); System.out.println(responseString); // 其他处理逻辑... } catch (URISyntaxException | IOException e) { e.printStackTrace(); } } } ``` 以上示例中,我们使用 `HttpPost` 请求发送 POST 请求。同样,我们通过 `addHeader` 方法设置了请求头中的 Content-Type 字段为 application/json。然后,我们设置了请求体为一个 JSON 字符串。最后,使用 `httpClient.execute(postRequest)` 方法发送请求并获取响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值