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