相关疑难解决方法(0)

如何在Java中将http响应主体作为字符串获取?

我知道曾经有一种方法可以通过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请求并将响应主体作为字符串而不是流来获取?

java apache-commons apache-httpclient-4.x

142
推荐指数
7
解决办法
41万
查看次数

HttpClient获取状态代码

使用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但也希望确认.提前致谢!

java apache-httpclient-4.x

39
推荐指数
2
解决办法
8万
查看次数

使用Apache的HTTP客户端时,将HTTP响应作为字符串获取的建议方法是什么?

我刚刚开始使用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)

java apache-commons-httpclient

16
推荐指数
2
解决办法
4万
查看次数

从HttpResponse获取内容和状态代码

我正在使用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 fluent apache-httpclient-4.x

13
推荐指数
1
解决办法
4784
查看次数

使用Apache HttpClient的Facade时,是否可以同时获取状态代码和正文内容?

在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语法并且不进行两次离散调用?

java fluent apache-httpclient-4.x

8
推荐指数
1
解决办法
2966
查看次数