为什么在POST方法请求后服务器响应GET?

时间:2011-10-06 08:29:34

标签: java networking post methods get

我只是想发送请求并读出ogc sos服务器的答案。

已发送请求:

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” 所以看起来服务器通过GET方法读取请求。

我在网络方面不是那么坚定,但据我所知,我确保setDoOutput(true);使用POST方法,不是吗?

当我得到任何答案时,我知道有一个联系,但可能是头部的东西是错的?是否有必要发送它?

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

我想我错过了使用java网络处理。

对每一个帮助都很高兴。

3 个答案:

答案 0 :(得分:2)

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

connection.setRequestMethod("POST");
connection.connect();

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

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

,请参阅此相关SO post

答案 1 :(得分:0)

如果请求方法确实是GET并且它在HTTP级别是非法的,那么根本不会获得所有XML,只是HTTP错误代码。看起来更像是目标上的SOAP层问题,或者是您要发送的XML的问题。

答案 2 :(得分:0)

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