Nano Hash - криптовалюты, майнинг, программирование

Почему сервер отвечает GET после запроса метода POST?

Я просто пытаюсь отправить запрос и прочитать ответ sos-сервера ogc.

Отправить запрос:

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 в командной строке быстрым способом устранения неполадок сторонних служб, подобных этому. 06.10.2011
  • Я не уверен насчет SOAP, но да, sos - это протокол обмена данными на основе xml. Без setDoOuput(true) я получаю исключение java.net.ProtocolException: невозможно записать в исключение URLConnection... Exception. Я искал cURL, но без опыта он кажется довольно щедрым, потому что win меня напрягает из-за отсутствия dll и т. Д. Есть ли что-то подобное, интегрированное в win с использованием cmd. 06.10.2011

Ответы:


1

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

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

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

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

06.10.2011
  • соединение.setRequestMethod(POST) 06.10.2011
  • NP ... Но метод становится POST, если вы установите для doOutput значение true. Просто сейчас не могу найти ссылку. 06.10.2011

  • 2

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

    06.10.2011

    3

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

    07.10.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..