2011-10-06 45 views
0

我只是想發送一個請求,並讀出一個ogc sos服務器的答案。爲什麼服務器在POST方法請求後使用GET進行響應?

發送的請求:

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請求空」 所以它看起來像服務器通過GET方法讀取請求。

我不是那麼堅定的網絡,但據我瞭解,我確保通過setDoOutput(true);使用POST方法,不是嗎?

當我得到任何答案時,我知道有一個聯繫,但可能是有頭的東西是錯的?是否有必要在任何情況下發送它?

所以我的問題是什麼可能是什麼使我或服務器混淆了http方法?

我想我錯過了java網絡處理。

對所有幫助感到高興。

+0

我不確定這個確切的服務,但這看起來像一個SOAP服務。如果這是真的,則可能期望所有請求都是GET請求。嘗試不使用setDoOutput(true)。如果這不起作用,我發現在命令行上使用curl可以快速排除第三方服務的故障。 –

+0

我不確定SOAP,但是是sos是基於xml的數據交換protokoll。沒有setDoOuput(true),我得到一個「java.net.ProtocolException:無法寫入URLConnection ...」異常。我一直在尋找cURL,但沒有經驗,似乎相當奢侈,因爲win會通過丟失dll等來強調我。在使用cmd的win中是否有類似的功能。 – user972851

回答

0

簡單的回答是: 在每個請求行的末尾添加一些「\ n」,並且它工作正常。

2

可以,也明確,指定POST方法如下(以查看是否解決了這個問題):

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

是,URLConnection.seDoOutput(true)意味着你打算使用URLConnection輸出(默認情況下,是false)並隱含告訴HttpURLConnection使用POST

我的假設是您沒有將請求參數傳遞給Web服務。使用URLConnection查看與此相關的SO post

+0

connection.setRequestMethod(「POST」) – EJP

+0

@EJP,謝謝...更正。 –

+0

NP ...但是,如果將doOutput設置爲true,該方法將變爲POST。目前只能提供參考。 – EJP

0

如果請求方法確實是GET並且在HTTP級別上是非法的,那麼根本就不會獲得所有的XML,只是一個HTTP錯誤代碼。看起來更像是目標上的SOAP層問題,或者與您發送的XML有關的問題。

相關問題