Apache HttpClientにHTTPリクエストを実行させ、HTTPレスポンスコード(200、404、500など)とHTTPレスポンスボディ(テキスト文字列)を表示しようとしています。ほとんどのHttpClientの例は_v4.2.2
_からのものであり、APIはバージョン3からバージョン4に大きく変わったため、_v.3.x.x
_を使用していることに注意することが重要です。
残念ながら、HttpClientがステータスコードを返すことしかできませんでしたまたは応答本文(両方ではありません)。
私が持っているものは次のとおりです。
_// Getting the status code.
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://whatever.blah.com");
HttpResponse resp = client.execute(httpGet);
int statusCode = resp.getStatusLine().getStatusCode();
// Getting the response body.
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://whatever.blah.com");
ResponseHandler<String> handler = new BasicResponseHandler();
String body = client.execute(httpGet, handler);
_
そこで私は尋ねます:_v4.2.2
_ライブラリを使用して、同じclient.execute(...)
呼び出しからステータスコードと応答本文の両方を取得するにはどうすればよいですか?事前に感謝します!
execute
にハンドラーを提供しないでください。
HttpResponse
オブジェクトを取得し、ハンドラーを使用して本体を取得し、そこからステータスコードを直接取得します
HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();
BasicResponseHandlerを回避できますが、HttpResponse自体を使用して、ステータスと応答の両方を文字列として取得します。
HttpResponse response = httpClient.execute(get);
// Getting the status code.
int statusCode = response.getStatusLine().getStatusCode();
// Getting the response body.
String responseBody = EntityUtils.toString(response.getEntity());
BasicResponseHandlerは、ステータスが2xxでない場合にスローされます。 javadoc を参照してください。
ここに私がそれをする方法があります:
HttpResponse response = client.execute( get );
int code = response.getStatusLine().getStatusCode();
InputStream body = response.getEntity().getContent();
// Read the body stream
または、ステータスが2xxでない場合にスローしないBasicResponseHandlerソースから開始するResponseHandlerを記述することもできます。
Fluent Facade API:
Response response = Request.Get(uri)
.connectTimeout(MILLIS_ONE_SECOND)
.socketTimeout(MILLIS_ONE_SECOND)
.execute();
HttpResponse httpResponse = response.returnResponse();
StatusLine statusLine = httpResponse.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
// 响应内容编码自适应?(好像没那么智能)
String responseContent = EntityUtils.toString(
httpResponse.getEntity(), StandardCharsets.UTF_8.name());
}
Springを使用している場合
return new ResponseEntity<String>("your response", HttpStatus.ACCEPTED);