创建连接后在 java.net.HttpURLConnection 中设置/更改查询参数

问题描述

首先,我很抱歉,因为我几乎可以肯定这个问题是重复的。我有一个非常简单/基本的问题,我确定肯定在某个地方得到了回答……但我似乎在任何地方都找不到答案:)

我正在开发一个以批处理模式通过 HTTP 向服务器发送请求的应用程序。该应用程序在夜间执行,在 6-8 小时内每小时可能发送大约 100 万个请求。这些不是网络请求,来自服务器的响应将是一个 JSON 字符串。每个请求都发送到相同的服务器/端口,但每个请求可以有不同的参数。

我的问题是如何只创建一次连接,但在每次调用/执行时传递不同的参数。我在网上看过 How to use java.net.URLConnection to fire and handle HTTP requests? 和许多教程,但我不太明白如何满足我的特殊需求。我还查看了 HTTP URLConnectionURLEncoder 的 Java 文档,但我找不到一种方法来完成我需要使用的任何内容

我的代码是:

//Build query string
String url = "http://example.com:5000/someScript?foo=bar&ya=hoo";

//Open a connection
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");

//send an HTTP GET request and receive back a response
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
//... do something with the response

虽然这行得通,但我发现 (HttpURLConnection) obj.openConnection() 行的平均值约为。每次调用需要 8500 万纳秒。在 6 个小时的时间里,这加起来相当多。这不是阻止程序,但我仍然非常希望提高性能

理想情况下,我想执行以下操作:

这段代码只被调用一次(或者每个线程调用一次):

//URL of service
String url = "http://example.com:5000/someScript?";

//Open a connection
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");

然后会为第一个请求调用代码:(第一行是伪代码

//set query parameter -- THIS IS NOT A REAL METHOD OF COURSE
con.setQueryParameter("foo=bar&ya=hoo");

//send an HTTP GET request and receive back a response
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
//... do something with the response

然后这个代码会被第二个请求调用:(第一行是伪代码

//set query parameter -- THIS IS NOT A REAL METHOD OF COURSE
con.setQueryParameter("foo=blah&ya=nope");

//send an HTTP GET request and receive back a response
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
//... do something with the response

等等等等。我希望我的问题足够清楚。任何帮助将不胜感激。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)