java - 如何发出 Http Get 快速请求?

标签 java android http-get

实际上我有一个正确的代码,可以向 twitter 发出 http 请愿书,并从用户那里获取一些用 JSON 编码的推文(它获取一个文件 .json)

没关系,它工作正常,但是发出请求需要 loooooooooooooot 的时间,调试我可以看到问题在 HttpResponse response = httpclient.execute(httpget);

当推文数量超过 3 或 4 条时,在那条线上它会卡住很多秒。如果您请求 20 条推文,则需要 10-15 秒才能获得。

这是我使用的 java/android http get 方法的问题,因为如果我在 firefox 上通过 url 发出请求,那么它非常快。

如何让这个http get请求更快一些?

这是我实际的慢速代码:

public List<String> RetrieveTweets(String name, int num) //da todas las posiciones dado un email
{
    // https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=charliesheen&count=2
    List<String> tweetsList= new ArrayList<String>(); 
    String result = "";
    //http get
    InputStream is=null;
    try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpGet httpget = new HttpGet("https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=" + name +"&count="+ num);
            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
    }catch(Exception e){
            Log.e("log_tag", "Error in http connection "+e.toString());
    }
    //convert response to string
    try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
            }
            is.close();
            result=sb.toString();
    }catch(Exception e){
            Log.e("log_tag", "Error converting result "+e.toString());
    }
    //parse json data
    try{
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++)
            {
                    JSONObject json_data = jArray.getJSONObject(i);
                    tweetsList.add(json_data.getString("text")); //text es el nombre del campo del tweet
            }
    }
    catch(JSONException e){
            Log.e("log_tag", "Error parsing data "+e.toString());
    }
    return tweetsList;
}

最佳答案

是否需要使用 https 版本来获取状态?由于两件事,https 会比 http 慢:

  • 初始连接需要握手协商来决定密码算法+ session key
  • 建立握手后,每种通信方式都需要对消息进行加密/解密。

如果您需要我们的 SSL,您可以尝试实例化 HttpClient 一次,而不是每次都在方法中实例化。希望它能使 session 保持 Activity 状态,从而避免握手,如果您每次都启动它,握手的代价可能很高。

关于java - 如何发出 Http Get 快速请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340895/

相关文章:

java - 在java中将字符数组转换为对象数组?是否可以?

java - 带有用于启动/停止的 Maven 插件的轻量级 Java 数据库?

android - 重定向后清除上一个屏幕(清除 fragment 的后退堆栈)kotlin

安卓短信广播接收器

javascript - 使用 JQuery 访问 $.GET 中的项目

java - 验证必填字段的表达式

java - RecyclerView 上的 Android throw Action

android - 使用一个 apk 安装两个应用程序

c# - 使用来自 MVC Controller 的复杂对象对 API 端点的 Http GET 调用

http - 如何在 JSP 页面中使用 HTTP POST 将 FORM 发送到 Paypal 并读取响应?