Почему сервер отвечает GET после запроса метода POST? - PullRequest
0 голосов
/ 06 октября 2011

Я просто пытаюсь отправить запрос и зачитать ответ сервера 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 request null» Похоже, сервер читает запрос методом GET.

Я не так уж сильна в сетевом взаимодействии, но, как я понял, я setDoOutput(true); гарантирую использование метода POST, не так ли?

Когда я получаю любой ответ, я знаю, что есть связь, но может быть, что-то с головой не так? Нужно ли в каждом случае его отправлять?

Итак, мой вопрос, что может быть причиной того, что меня или сервер путают в методах http?

Полагаю, мне не хватает обработки сети Java.

Буду рад любой помощи.

Ответы [ 3 ]

2 голосов
/ 06 октября 2011

Вы также можете явно указать метод POST следующим образом (чтобы увидеть, решит ли это проблему):

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

Да, URLConnection.seDoOutput(true) означает, что вы намерены использовать URLConnection для вывода (по умолчанию false) и неявно указывает HttpURLConnection использовать POST.

Я предполагаю, что вы не передаете параметры запроса в веб-службу. См. Этот связанный SO post по использованию URLConnection.

0 голосов
/ 07 октября 2011

простой ответ: добавьте "\ n" в конце каждой строки запроса, и все будет работать нормально.

0 голосов
/ 06 октября 2011

Если бы методом запроса действительно был GET и он был недопустим на уровне HTTP, вы бы вообще не вернули весь этот XML, только код ошибки HTTP.Больше похоже на проблему уровня SOAP в цели или проблему с отправляемым вами XML.

...