Java中可以使用多种方式执行 HTTP 请求:HttpClient(Java 11+ 引入)提供了简洁且现代的 API 支持异步请求;HttpURLConnection 是 Java 标准库中较旧的方式,适合基本的 GET 和 POST 操作;而使用第三方库如 Apache 的 HttpClient 或 OkHttp 可以带来更强大的功能和更好的易用性,适合处理更复杂的 HTTP 请求场景。本文主要介绍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.execut (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

推荐文档

相关文档

大家感兴趣的内容

随机列表