我只是想發送一個請求,並讀出一個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網絡處理。
對所有幫助感到高興。
我不確定這個確切的服務,但這看起來像一個SOAP服務。如果這是真的,則可能期望所有請求都是GET請求。嘗試不使用setDoOutput(true)。如果這不起作用,我發現在命令行上使用curl可以快速排除第三方服務的故障。 –
我不確定SOAP,但是是sos是基於xml的數據交換protokoll。沒有setDoOuput(true),我得到一個「java.net.ProtocolException:無法寫入URLConnection ...」異常。我一直在尋找cURL,但沒有經驗,似乎相當奢侈,因爲win會通過丟失dll等來強調我。在使用cmd的win中是否有類似的功能。 – user972851