java ; HttpURL连接;查询项重复为 `paramName=value, value` 。预计为 `paramName=value`

标签 java httpurlconnection

我遇到了一个非常奇怪的问题。

我的公司为我们的各种 Assets 使用集中式用户注册网络服务。我们一般通过HttpURLConnection使用请求方法GET向Web服务发送请求,通过qs设置参数。这在过去效果很好。

对于我们最近获取并插入到我们的注册 Web 服务中的另一个属性,HttpURLConnection 在发送时似乎会重复参数。参数的预期值为 paramName=value,但我们收到的是 paramName=value, value。以下是我们日志中的情况:

注意:删除特定于我的雇主和我们的系统的信息。

01-26 15:21:54 [TP-Processor17] INFO  com].[/] - parameter=userName=nameValue65, nameValue65
01-26 15:21:54 [TP-Processor17] INFO  com].[/] - parameter=policyAccepted=true, true

这当然会导致端点验证出错并禁用用户注册。

以下是用于创建连接的代码的表示:

URL url = new URL("http://account-ws.domain.tld/register.action?responseType=json&userName=nameValue65&age=24&country=US&password1=Passw3rt&emailAddress=name@domain.tld&tosAccepted=true&policyAccepted=true");

HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestMethod("GET");
urlc.setDoOutput(true);
urlc.setAllowUserInteraction(false);

PrintStream ps = new PrintStream(urlc.getOutputStream());
ps.print(restEndPoint);
ps.close();

也许(?)有用的信息:

  • 注册表单使用 POST 提交给自身,此时我们使用 Struts 表单进行验证,并使用 Struts 表单验证类返回的值将请求发送到 Web 服务。 (在发送之前再次检查这些值的准确性。)
  • Wireshark 和 log4j 调试消息表明发送到 Web 服务的 URL 正确/符合我们的预期,每个参数都有单个值。
  • 发起表单的发布字段的名称与随网络服务请求发送的查询键的名称相同。

如果您发现此处内容不足,请索取更多信息。

提前谢谢您! :)

最佳答案

当您使用GET时方法中,查询字符串被添加到 URL 字符串中。 GET method 是 HttpURLConnection 的默认 Http 请求方法。您无需显式将请求方法设置为 GET .

一个GET方法用于获取请求的URL的内容。您不应该写入 GET 的输出流连接。

如果您想使用POST方法,可以通过 setRequestMethod("POST") 设置但我不确定你是否需要setDoOutput(true)以及。然而,setDoOutput(true)默认情况下,将请求方法设置为 POST所以你不妨忽略 setRequestMethod("POST") 。如果您想使用 POST 写入输出流, here是我之前关于如何使用 HttpURLConnection 进行操作的答案.

需要注意的是,当你执行 POST 时(或 PUT ),URL 不应包含查询部分。因为你有 GET 的混合物和POST ,这可能是您问题的原因,但我不确定。

一种可能的情况是您必须同时使用 setRequestMethodsetDoOutput(true)就是当你想做一个 Http PUT .

关于 java ; HttpURL连接;查询项重复为 `paramName=value, value` 。预计为 `paramName=value`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832781/

相关文章:

java - Hibernate 搜索投影 - StaticAliasToBeanResultTransformer

java - Android Lollipop 中的服务似乎随机消失,没有错误

java - HttpURLConnection 不提交 POST 数据 (Android)

java - 如何在Java中模拟一个站点?

java - 使用 java UrlConnection 对 ntlm(或 kerberos)进行身份验证

java - 使用 Java 库的随机访问结构化存档文件格式

java - 为什么在 JSTL 中使用此枚举作为选项时会出现错误

java - 以特定格式获取当前日期

java - Android下HttpURLConnection的默认超时时间是多少?

java - android无法建立URL连接