我有一个非常奇怪的问题。
我的公司为我们的各种房产使用集中的用户注册网络服务。我们通常通过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();
也许(?)有用的信息:
如果您发现这里的内容不足,请询问更多信息。
提前谢谢! :)
答案 0 :(得分:1)
使用GET
方法时,查询字符串将添加到URL字符串中。 GET
方法是HttpURLConnection
的默认Http请求方法。您无需将请求方法明确设置为GET
。
GET
方法用于获取请求的URL的内容。您不应该写入GET
连接的输出流。
如果您想使用POST
方法,可以通过setRequestMethod("POST")
进行设置,但我不确定您是否还需要setDoOutput(true)
。但是,默认情况下,setDoOutput(true)
会将请求方法设置为POST
,因此您也可以忽略setRequestMethod("POST")
。如果您想使用POST
写入输出流,here是我之前使用HttpURLConnection
进行操作的答案。
应该注意的是,当您执行POST
(或PUT
)时,该网址不应包含查询部分。由于您混合使用GET
和POST
,这可能是您遇到问题的原因,但我不确定。
您必须同时使用setRequestMethod
和setDoOutput(true)
的一种可能情况是,您希望执行Http PUT
。