【问题标题】:How to make quick http requests ? (Java)如何进行快速的 http 请求? (爪哇)
【发布时间】:2012-11-01 06:41:05
【问题描述】:

我创建了一个充当自动购买者的应用程序。使其尽可能快对于比其他任何人更快地到达该项目至关重要。我正在使用无限循环(即 for(;;))发出连续的 http 请求,然后解析 JSON 结果。

有谁知道如何同时发出多个请求?我目前每秒处理大约 3 个请求。 java也不适合这种应用程序吗?我应该考虑使用另一种语言吗?

非常感谢你!

编辑:我使用类似的搜索功能

for(;;){
search(323213, 67);
search(376753, 89);
}

public void search(int itemID, int maxPrice) {

// sets the http request with the need cookies and headers
// processes the json. If (itemId==x&&maxPrice>y) ==> call buy method

}

【问题讨论】:

    标签: java json performance http request


    【解决方案1】:

    在无限循环中发出请求将使您的 IP 被任何主动监控滥用的服务阻止。

    如果您希望在短时间内并行发送一堆请求,请启动多个线程并让每个线程提交一个请求。

    Java 是一个非常强大的多线程平台。

    【讨论】:

    • 感谢您的意见。我会做线程。运行我的应用程序几个小时没有被标记或任何东西,猜测是因为它太慢而无法被标记为滥用 lol
    • @user1776576:如果他们还没有注意到你在做什么,他们可能仍然会注意到。请尊重任何可能适用的服务条款,并且无论他们今天是否检测到请求,都不要让他们的基础架构不堪重负。
    【解决方案2】:

    使用ScheduledThreadPoolExecutor,您可以安排一个runnable 以固定速率运行,比如每10 秒一次,而不必担心自己产生线程。

    【讨论】:

      【解决方案3】:

      这是另一篇文章,它提供了一个很好的例子来说明如何使用线程来做到这一点: How do you create an asynchronous HTTP request in JAVA?

      如果您熟悉 JavaScript,Node.JS 是另一个不错的选择。使用 Node.JS 无需担心线程,因为请求是异步完成的。

      【讨论】:

      • 感谢您的建议,我研究了 Node.Js,它看起来非常适合我想要完成的工作。再次感谢
      【解决方案4】:
      1. 获取请求字符串 url = "http://www.google.com/search?q=developer";

        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);
        
        // add request header
        request.addHeader("User-Agent", USER_AGENT);
        
        HttpResponse response = client.execute(request);
        
      2. 字符串 url = "https://selfsolve.apple.com/wcResults.do";

        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url);
        
        // add header
        post.setHeader("User-Agent", USER_AGENT);
        
        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
        urlParameters.add(new BasicNameValuePair("sn", "C02G8416DRJM"));
        urlParameters.add(new BasicNameValuePair("cn", ""));
        urlParameters.add(new BasicNameValuePair("locale", ""));
        urlParameters.add(new BasicNameValuePair("caller", ""));
        urlParameters.add(new BasicNameValuePair("num", "12345"));
        
        post.setEntity(new UrlEncodedFormEntity(urlParameters));
        
        HttpResponse response = client.execute(post);
        

      【讨论】:

        猜你喜欢
        • 2016-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-07
        • 2019-02-01
        • 2016-07-12
        相关资源
        最近更新 更多