如何进行快速的 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 请求? (爪哇)的主要内容,如果未能解决你的问题,请参考以下文章
一次生产上由于Nginx引起的HTTP请求Header参数丢失的问题