Java 为什么服务器响应GET after POST方法请求?

Java 为什么服务器响应GET after POST方法请求?,java,networking,post,methods,get,Java,Networking,Post,Methods,Get,我只是想发送一个请求并读出OGCSOS服务器的答案 已发送请求: connection = new URL(url).openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestProperty("Accept-Charset", charset); connection.setRequestProperty("Content-Type", "applicati

我只是想发送一个请求并读出OGCSOS服务器的答案

已发送请求:

connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Accept-Charset", charset);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset="+charset);
connection.connect();
阅读回应:

output = connection.getOutputStream();
output.write(query.getBytes(charset));
input = new URL(url).openStream();
Reader reader = new InputStreamReader(input);
BufferedReader bufferedReader = new BufferedReader(reader);
StringBuilder response = new StringBuilder();           
String line = null;

while((line = bufferedReader.readLine()) != null)
   response.append(line+"\n");

bufferedReader.close();
output.close();
服务器的响应是:

<?xml version="1.0" encoding="UTF-8"?>
<ows:ExceptionReport xmlns:ows="http://www.opengis.net/ows/1.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0.0" 
   xsi:schemaLocation="http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd">
  <ows:Exception exceptionCode="InvalidRequest" locator="REQUEST">
  <ows:ExceptionText>The GET request null is not supported by this SOS.</ows:ExceptionText>
  </ows:Exception>
</ows:ExceptionReport>

此SOS不支持GET请求null。
该格式是一种特殊的sos类型,但主要消息是“GET request null” 因此,服务器似乎通过GET方法读取请求

我在网络方面没有那么坚定,但据我所知,我通过
setDoOutput(true)来确保
当我得到任何答案时,我知道这是有联系的,但可能是头部有问题吗?在任何情况下都有必要发送吗

所以我的问题是,是什么原因让我或服务器对http方法感到困惑

我想我是误用了java网络处理


非常感谢您的帮助。

您还可以明确指定
POST
方法,如下所示(以查看是否解决了问题):

是,
URLConnection.seDoOutput(true)
表示您打算将
URLConnection
用于输出(默认值为
false
),并隐式告诉
HttpURLConnection
使用
POST


我的假设是您没有将请求参数传递给Web服务。请参阅有关使用
URLConnection

的相关内容。如果请求方法确实是GET,并且在HTTP级别是非法的,那么您根本无法获取所有XML,只是一个HTTP错误代码。看起来更像是目标的SOAP层问题,或者是您发送的XML的问题。

简单的答案是:
在每个请求行的末尾添加一些“\n”,它就可以正常工作。

我不确定这个确切的服务,但它看起来像一个SOAP服务。如果这是真的,那么很可能期望所有请求都是GET请求。尝试不使用setDoOutput(true)。如果这不起作用,我发现在命令行上使用curl是解决第三方服务故障的一种快速方法。我不确定是否使用SOAP,但sos是一种基于xml的数据交换协议。如果没有setDoOuput(true),我会得到一个“java.net.ProtocolException:无法写入URLConnection…”异常。我一直在寻找cURL,但没有经验,它似乎相当奢侈,因为win由于缺少dll等而给我带来压力。在win中是否使用cmd.connection.setRequestMethod(“POST”)NP集成了类似的东西。。。但如果将doOutput设置为true,则该方法确实会变成POST。只是我现在找不到推荐人。
connection.setRequestMethod("POST");
connection.connect();