Отправка Java POST-запроса без вызова getInputStream () - PullRequest
0 голосов
/ 20 сентября 2011

Я хотел бы отправить запрос POST на Java. На данный момент я делаю это так:

URL url = new URL("myurl");
URLConnection con = url.openConnection();
con.setDoOutput(true);
PrintStream ps = new PrintStream(con.getOutputStream());
ps.println("key=" + URLEncoder.encode("value"));
// we have to get the input stream in order to actually send the request
con.getInputStream();  
ps.close();

Я не понимаю, почему я должен вызывать con.getInputStream () для фактической отправки запроса. Если я не позвоню, запрос не будет отправлен.

Есть ли проблемы с использованием PrintStream? Не должно иметь значения, беру ли я PrintStream, PrintWriter или что-то еще, верно?

Ответы [ 3 ]

0 голосов
/ 20 сентября 2011

Попробуйте добавить

con.setDoInput (false);
перед записью в вывод.

P.S .: и вы также должны вызвать con.connect (), как говорит swanliu.

Обновление
Это то, что я придумал


    private static final void sendPostRequest (final String urlAddress, String key, String value) throws Exception
    {
        URL url = new URL (urlAddress);
        URLConnection con = url.openConnection ();
        con.setDoOutput (true);
        con.setDoInput (false);
        PrintStream ps = new PrintStream (con.getOutputStream ());
        ps.println (key + "=" + URLEncoder.encode (value, "UTF-8"));
        ps.flush ();
        con.connect ();
        ps.close ();
    }

Я проверил с помощью WireShark, что соединение TCP установлено и закрыто. Но не знаю, как проверить, что сервер получил запрос. Если у вас есть быстрый способ проверить это, вы можете попробовать этот код.

0 голосов
/ 14 ноября 2011

Я думаю, что пост другой ветки ответил на мой вопрос.Извините, но я нашел это слишком поздно.Вы можете найти его здесь .

PS: К сожалению, Stackoverflow добавил мой последний ответ на вопрос в качестве комментария, потому что мой ответ был слишком коротким.И невозможно пометить комментарий как правильный ответ ... Надеюсь, этот комментарий достаточно длинный: -)

0 голосов
/ 20 сентября 2011

URL представляет некоторый источник.

URLConnection представляет соединение с ресурсом.

вам нужен вызов connection.connect () для подключения соединения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...