我知道曾经有一种方法可以通过apache commons来获取它,如下所示:http: //hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html 以及此处的示例:
http://www.kodejava.org/examples/416.html
但我相信这已被弃用了.是否还有其他方法可以在java中生成http get请求并将响应主体作为字符串而不是流来获取?
使用Apache HttpClient 4.1.3并尝试从以下位置获取状态代码HttpGet:
HttpClient client = new DefaultHttpClient();
HttpGet response = new HttpGet("http://www.example.com");
ResponseHandler<String> handler = new BasicResponseHandler();
String body = client.execute(response, handler);
Run Code Online (Sandbox Code Playgroud)
如何从中提取状态代码(202,404等)body?或者,如果在4.1.3中有另一种方法可以做到这一点,它是什么?
此外,我假设一个完美/良好的HTTP响应是一个,HttpStatus.SC_ACCEPTED但也希望确认.提前致谢!
我刚刚开始使用Apache的HTTP客户端库,并注意到没有内置的方法将HTTP响应作为String获取.我只是想像String那样得到它,以便我可以将它传递给我正在使用的任何解析库.
将HTTP响应作为String获取的推荐方法是什么?这是我提出请求的代码:
public String doGet(String strUrl, List<NameValuePair> lstParams) {
String strResponse = null;
try {
HttpGet htpGet = new HttpGet(strUrl);
htpGet.setEntity(new UrlEncodedFormEntity(lstParams));
DefaultHttpClient dhcClient = new DefaultHttpClient();
PersistentCookieStore pscStore = new PersistentCookieStore(this);
dhcClient.setCookieStore(pscStore);
HttpResponse resResponse = dhcClient.execute(htpGet);
//strResponse = getResponse(resResponse);
} catch (ClientProtocolException e) {
throw e;
} catch (IOException e) {
throw e;
}
return strResponse;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用apache的HttpClient(通过Fluent API).当我收到响应对象时,我首先做:
response.returnResponse().getStatusLine().getStatusCode()
Run Code Online (Sandbox Code Playgroud)
如果状态代码是4xx或5xx,我抛出异常,或者我返回内容:
response.returnContent().asBytes();
Run Code Online (Sandbox Code Playgroud)
这response是一个类型的对象Response.但是,当我运行这个时,我得到:
java.lang.IllegalStateException: Response content has been already consumed.
Run Code Online (Sandbox Code Playgroud)
我怎么能绕过这个?
我在Java中使用Apache的HttpClient Fluent Facade中的一些示例代码供开发人员扩展.他们真的很喜欢流利的外观,能够打电话:
this.body = Request.Get(uri.build()).execute().returnContent().asString();
Run Code Online (Sandbox Code Playgroud)
另外,我可以通过调用获取状态代码:
this.statusCode = Request.Get(uri.build()).execute().returnResponse().getStatusLine().getStatusCode();
Run Code Online (Sandbox Code Playgroud)
不幸的是,有几个实例我需要除了正文之外的状态代码.根据这个问题,我看到我可以让他们学习HttpClient对象 -
HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();
Run Code Online (Sandbox Code Playgroud)
但是,这意味着初始化HttpClient对象并且似乎拒绝了Fluent接口和Request.Get(或Post)语法.有没有办法同时获取状态代码和正文而不会丢失Fluent语法并且不进行两次离散调用?