Java HTTP POST не работает, как ожидалось? - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь отправить некоторые данные в URL с некоторыми почтовыми данными.Iv попробовал следующий код: -

try {
        // Construct data
        String data = URLEncoder.encode("appid", "UTF-8") + "=" + URLEncoder.encode("2", "UTF-8");
        data += "&" + URLEncoder.encode("secret", "UTF-8") + "=" + URLEncoder.encode("APPSECRET", "UTF-8");
        data += "&" + URLEncoder.encode("usermcaccount", "UTF-8") + "=" + URLEncoder.encode("NAME", "UTF-8");
        data += "&" + URLEncoder.encode("actiontype", "UTF-8") + "=" + URLEncoder.encode("ACTION", "UTF-8");
        data += "&" + URLEncoder.encode("serverip", "UTF-8") + "=" + URLEncoder.encode("IP", "UTF-8");


        // Send data
        URL url = new URL("http://maiacraft.com/api/");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true);
        conn.setRequestMethod("POST");
        DataOutputStream outStream;


        OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

        //write parameters
        writer.write(data);
        writer.flush();
        writer.close();




    } catch (Exception e) {
    }

И все же он, похоже, не отправляет его на сервер.Весь код на стороне сервера работает, так как он позволяет отправлять запросы с другой страницы, но не из этого кода Java ...

Есть идеи?

1 Ответ

3 голосов
/ 30 марта 2012

Есть идеи?

  1. Вы не проверяете статус ответа HTTP.Это даст вам некоторые подсказки относительно того, что идет не так.Статус ответа может указывать на разные вещи;например, что параметры вашего запроса неверны, URL-адрес неправильный, у вас нет разрешения, вам необходимо войти в систему, сервер не работает, и так далее.

  2. Если вы получаете неКод ответа 2xx, скорее всего, в теле ответа будет больше информации.Вы можете получить к нему доступ, открыв и прочитав поток ошибок объекта подключения.

  3. Проверьте журналы сервера.

  4. Попробуйте отправить тот же запрос, используявеб-браузер или утилиту типа curl или wget.(Поместите аргументы POST в файл ... или прикрепите их к URL-адресу.)

  5. Захватите и внимательно изучите закодированные данные POST, которые фактически отправляет ваша программа Java.Вы можете изменить программу так, чтобы она печатала data до ее отправки, или вы могли бы использовать Wireshark (или эквивалентный) для считывания запроса с провода.После того, как вы собрали данные, тщательно сравните их с тем, что сказано в спецификации HTML о данных формы кодирования;см. http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4

  6. Наконец, вы не устанавливаете заголовок типа контента в запросе.Вполне возможно, что это заставляет сервер игнорировать данные POST.Прочитайте спецификацию HTTP для описания заголовков, которые должны быть установлены.(В этом случае вам следует использовать тип содержимого, состоящий из mime-типа «application / x-www-form-urlencoded» и используемой кодировки содержимого - «UTF-8»; см. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17)


Я не буду упоминать исключение сжатия мерзость в конце примера кода ....

Упс. Я только что сделал: -)

...