Java使用HttpClient、HttpURLConnection、Request执行Get和Post请求

本文主要介绍Java中,使用Apache HTTP Components(HttpClient、HttpURLConnection、Request)执行Get和Post请求的方法及示例代码。

1、使用HttpClient执行Get和Post

相关文档http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d5e37

1)执行GET请求

public static Map<String, Object> sendGet(String sendUrl) {
		Map<String, Object> mres = new HashMap<String, Object>();
		// 默认配置创建一个httpClient实例
		CloseableHttpClient httpClient = HttpClients.createDefault();
		// 创建httpGet远程连接实例
		HttpGet httpGet = new HttpGet(sendUrl);
		// 设置配置请求参数
		RequestConfig requestConfig = RequestConfig.custom()
				.setConnectTimeout(35000)// 连接主机服务超时时间
				.setConnectionRequestTimeout(35000)// 请求超时时间
				.setSocketTimeout(60000)// 数据读取超时时间
				.build();
		// 为httpGet实例设置配置
		httpGet.setConfig(requestConfig);
		try {
			// 执行get请求得到返回对象
			CloseableHttpResponse response = httpClient.execute(httpGet);
			// 通过返回对象获取返回数据
			HttpEntity entity = response.getEntity();
			// 通过EntityUtils中的toString方法将结果转换为字符串
			String result = EntityUtils.toString(entity, "UTF-8");
			mres = (Map<String, Object>) JSONObject.toBean(JSONObject.fromObject(result), Map.class);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			if (null != httpClient) {
				try {
					httpClient.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return mres;
        }

2)执行Post请求

/*
 * Create the POST request
 */
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://example.com/");
// Request parameters and other properties.
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user", "Bob"));
try {
    httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
} catch (UnsupportedEncodingException e) {
    // writing error to Log
    e.printStackTrace();
}
/*
 * Execute the HTTP Request
 */
try {
    HttpResponse response = httpClient.execute(httpPost);
    HttpEntity respEntity = response.getEntity();
    if (respEntity != null) {
        // EntityUtils to get the response content
        String content =  EntityUtils.toString(respEntity);
    }
} catch (ClientProtocolException e) {
    // writing exception to log
    e.printStackTrace();
} catch (IOException e) {
    // writing exception to log
    e.printStackTrace();
}

2、使用HttpURLConnection执行Get和Post

1)执行Get请求

 URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 返回结果-字节输入流转换成字符输入流,控制台输出字符
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println(sb);

2)执行Post请求

String rawData = "id=10";
String type = "application/x-www-form-urlencoded";
String encodedData = URLEncoder.encode( rawData, "UTF-8" );
URL u = new URL("http://www.example.com/page.php");
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length", String.valueOf(encodedData.length()));
OutputStream os = conn.getOutputStream();
os.write(encodedData.getBytes());

3、使用Request执行Get和Post请求

1)执行Get请求

Request.Get("http://somehost/")
.connectTimeout(1000)
.socketTimeout(1000)
.execute().returnContent().asString();

2)执行Post请求

Request.Post("http://www.example.com/page.php")
.bodyForm(Form.form().add("id", "10").build())
.execute()
.returnContent();

相关文档http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fluent.html

推荐阅读
cjavapy编程之路首页