如何进行快速的 http 请求? (爪哇)

Posted

技术标签:

【中文标题】如何进行快速的 http 请求? (爪哇)【英文标题】:How to make quick http requests ? (Java) 【发布时间】: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


【问题讨论】:

【参考方案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】:

    获取请求字符串 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);
    

    字符串 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);
    

【讨论】:

以上是关于如何进行快速的 http 请求? (爪哇)的主要内容,如果未能解决你的问题,请参考以下文章

如何在快速服务器中进行 ajax 获取/发布请求?

一次生产上由于Nginx引起的HTTP请求Header参数丢失的问题

如何快速过滤出一次请求的所有日志?

如何拦截 node.js 快速请求

aiohttp 异步http请求-1.快速入门 get 请求示例

服务治理最佳实践:如何快速依据请求参数值进行服务路由鉴权限流?