0

我想基于 Java 中的 URL 创建一个 http 请求并更改其某些标头或添加新标头;然后,接收该请求的相应 http 响应并获取其标头值及其内容。我怎样才能尽可能简单地做到这一点?

4

2 回答 2

3

确实使用 apache httpclient 4.x 并使用 ResponseHandler。

HttpClient 有很多您可能希望原始 Java API 不提供的好东西,例如多线程使用、连接池、对各种身份验证机制的支持等。

下面是一个简单的示例,它执行 get 并将正文作为字符串返回给您。

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

...

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.google.com");
httpGet.addHeader("MyHeader", "MyValue");

try {
    String body = httpClient.execute(httpGet, new ResponseHandler<String>() {

        @Override
        public String handleResponse(HttpResponse response) throws IOException {
            Header firstHeader = response.getFirstHeader("MyHeader");
            String headerValue = firstHeader.getValue();
            return EntityUtils.toString(response.getEntity());
        }
    });
} catch (IOException e) {
    e.printStackTrace();
}
于 2012-09-23T10:51:07.663 回答
2

您可以使用 Apache HTTP 客户端或使用标准实现它HttpUrlConnection

    URL url = new URL("http://thehost/thepath/");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod(method); // GET, POST, ...
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.addRequestProperty(key, value); // this way you can set HTTP header
于 2012-09-23T10:35:11.253 回答