最佳实践:发送HTTP GET请求

3

发送HTTP GET请求是否有更好的实践方法?

    private StringBuffer getData(String url)  throws Exception
{
        URL obj; 

        obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("GET");
        int responseCode = con.getResponseCode();

        BufferedReader in = new BufferedReader(
                new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();         
        return response;
}

也许是Webclient.DownloadString? - VladL
2个回答

4
我认为你应该进行两个简单的更改,一个是在finally块中关闭输入流,另一个是使用StringBuilder代替StringBuffer
此外,如果收到错误响应(400+、500+等),您可能希望检查响应代码并抛出异常。
编辑:
如果您计划缓冲所有内容,并且不介意使用库,那么您可以简单地执行以下操作:
Request.Get("http://some.url").execute().returnContent();

使用Apache HttpComponents

非常酷!是的,Apache 组件正是我在实践中寻找的比较。感谢您的澄清! - genxgeek

4
String uri = "your url";
    HttpParams httpParams = new BasicHttpParams();
    HttpClient client = new DefaultHttpClient(httpParams);
    HttpGet request = new HttpGet(uri);
    HttpResponse response = client.execute(request);
    String responseStr = buildResponseFromEntity(response.getEntity());

    private String buildResponseFromEntity(HttpEntity entity)
                throws IllegalStateException, IOException {

            BufferedReader r = new BufferedReader(new InputStreamReader(
                    entity.getContent()));
            StringBuilder total = new StringBuilder();
            String line;
            while ((line = r.readLine()) != null) {
                total.append(line);
            }
            return total.toString();
            }
    // check if error
if (response.getStatusLine().getStatusCode() != 200) {
            JSONObject jsonObj = null;
            try {
                jsonObj = new JSONObject(responseStr);
            } catch (Exception e) {
                // do your code
            }
}

1
您可能需要提到这是使用Apache HttpComponents进行的,以便更清晰地表达。此外,我认为最好的做法仍然是使用finally块并调用httpGet.releaseConnection()来释放底层连接。如果内容已经被缓冲,那么所有这些工作也都可以通过仅使用Request.Get("http://some.url").execute().returnContent();来完成。 - Trevor Freeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接