Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> POST-запрос на Java, как сэмулировать? 
:(
    Опции темы
Се ля ви
Дата 14.2.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



есть ли библиотеки специальные или как можно сделать POST-запрос вручную программно на Java? Насколько я понимаю, данные POST-запроса передаются в заголовке HTTP - как этот заголовок называется и в каком формате они там размещаются?
smile


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
AntonSaburov
Дата 14.2.2005, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Открыть Connection для TCP и эмулировать HTTP. Он вообщем-то не очень сложный.
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 14.2.2005, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Программно : пользуем HttpURLConnection, у негo есть метоd setRequestMethod(String method) .



--------------------

PM   Вверх
Се ля ви
Дата 14.2.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



Спасибо.
А как параметры постом передать? Я что-то не нашёл...


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Domestic Cat
Дата 14.2.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172





--------------------

PM   Вверх
Се ля ви
Дата 16.2.2005, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



Сенкс!
Вопрос смежный - как правильно передать в запросе куку?


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Domestic Cat
Дата 16.2.2005, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Как обычно - через header поле
http://www.rgagnon.com/javadetails/java-0092.html


--------------------

PM   Вверх
Се ля ви
Дата 16.2.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



Цитата
А как параметры постом передать? Я что-то не нашёл...


Цитата(Domestic @ 14.2.2005, 18:25)
smile
http://java.sun.com/j2se/1.4.2/docs/api/ja...va.lang.String)

Я имел ввиду параметры самого поста - т.е. как будто форму браузер на сервер отправляет. Sun посоветовал вписывать как в GET`е, только в тело запроса.

Вообще эта задумка мне нужна для того, что бы автоматически создавать темы в MVNForum`е. Схема простая - разместили статью и нужно сделать её обсуждение в форуме - я тупо выдираю информацию и эмулирую запрос на создание темы - результирующий сервлет не должен понять, что к нему обращается не браузер, а скрипт. Всё это включено в сервлет, который дёргается каждые 10 минут и смотрит, нет ли новых статей.

Код
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       response.setContentType("text/html");
       response.setStatus(200);

       PrintWriter out2 = response.getWriter();

       //out2.println("All right!!!");

       //HttpURLConnection con = (HttpURLConnection) url.openConnection();
       //con.setRequestMethod("POST");
       //con.setDoOutput(true);


       // Отправка запроса
       HttpURLConnection postConn;
       URL post = new URL("http", "localhost", 7001, "/forum/themes/addpostprocess");
       postConn = (HttpURLConnection)post.openConnection();
       postConn.setRequestMethod("POST");
       postConn.setDoOutput(true);

       CookiesInJava cij = new CookiesInJava();
       cij.addCookie("mvnforum.membername", "User1", false);
       cij.addCookie("mvnforum.encodedpassword", "h+Zp699hs0BZ7PsOcSIPm-==", false);
       cij.addCookie("mvncodemode", "1", false);
       cij.writeCookies(postConn, false);

       String data = "forum=1&" +
       "parent=0&" +
       "PostTopic=Век США завершился (\"China Daily\", Китай)&" +
       "message=" +
           "[url=http://www.inosmi.ru/issues/335.html][img]http://www.inosmi.ru/images/worldwide/wwlogos/335.gif[/img][/url] \n" +
           "[font=arial][b]Век США завершился[/b] (\"China Daily\", Китай)\n" +
          //"[color=silver]09 февраля 2005, 10:44[/color][/font]\n" +
           "[i]В своей второй инаугурационной речи, подцвеченной евангелистским рвением, Джордж Буш заявил: 'Сегодня Америка вновь обращается ко всему миру'. Однако, непохоже, чтобы весь мир слушал. Новый миропорядок действительно зарождается, но его архитектуру разрабатывают в Азии и Европе, на встречах, куда американцев не приглашают. Вспомните формат 'АСЕАН + 3', объединяющий членов Ассоциации государств Юго-Восточной Азии, Китай, Японию и Южную Корею. У этой организации есть потенциал стать самым большим торговым блоком мира, затмив Евросоюз и Североамериканскую ассоциацию свободной торговли[/i]\n" +
           "[url=http://www.inosmi.ru/stories/01/06/28/3008/217030.html][img]http://www.inosmi.ru/i/strr.gif[/img][/url]&" +
       "AddFavoriteParentThread=yes";

       //data = URLEncoder.encode(data, "UTF-8");

       //postConn.connect();

       PrintWriter out = new PrintWriter(postConn.getOutputStream());
       out.println(data);
       out.close();


       // Приём запроса:
       BufferedReader in = new BufferedReader(new InputStreamReader(postConn.getInputStream()));
       String inputLine;
       //StringBuffer buf = new StringBuffer();
       while ((inputLine = in.readLine()) != null)
           //buf.append(inputLine);
           out2.print(inputLine);

       in.close();
       //String response1 = buf.toString();

       /*PrintWriter out1 = new PrintWriter( con.getOutputStream() );
       out1.println("Hello!");
       out1.flush();
       out1.close();*/

       //out2.println(response1);
   }

Почему-то не работает - при обращении к серверу выдаёт java.lang.NullPointerException... smile
Дело, кажется, либо в куках, либо в кодировке запроса...

Идеально было бы подсмотреть за тем, какие конкретно запросы шлёт браузер при добавлении темы и мой скрипт - и сравнить их - но то ли я не смог разобраться с директивой netcat под юникс, которая это делает, то ли админы зарубили все порты кроме 7001 у этой машины и я не могу до них достучаться, а разбираться с ними по этому поводу долго...

Есть ещё идеи?


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Domestic Cat
Дата 16.2.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172




По-моему, GET запрос нe может быть длиннеe 255 символов.

Насчет пост реквестa - тут есть
http://www.javaworld.com/javaworld/javatip...-javatip34.html


--------------------

PM   Вверх
Zandr
Дата 18.2.2005, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 433
Регистрация: 16.7.2004
Где: Новосибирск

Репутация: нет
Всего: 13



GET в HTTP1.1 вроде как может быть длиннее 255 символов, но об этом не все проксики (и иже с ними) знают (и вообще понимают HTTP1.1). А для того чтобы не греть себе голову (и не плясать с дебагером вокруг компа) есть одна вещица в проекте Apache Jakarta. Там вам и гет и пост и кукисы и авторизации и SSL....
PM MAIL   Вверх
MilordReny
Дата 22.3.2012, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



ребята, куда удалился последний пост этой темы??? я в трауре, мне бы рабочий код этого решения Се ля ви, я в трауре!!!
Код

    public static String getPost(String url, String[] key, String[] value,
            String coding) throws MalformedURLException, IOException{
        URL ur = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) ur.openConnection();
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("accept-charset", coding);
        conn.setRequestProperty("class", "application");
        conn.setRequestProperty("Accept", "text/html");
        conn.setRequestProperty("Accept-Language", "en-US");
        conn.setRequestProperty ("User-agent", "Mozilla/4.76 (Java"
                    + "; U;"+System.getProperty("os.name")
                    + " "+System.getProperty("os.arch")
                    + " "+System.getProperty("os.version")
                    + "; ru; "+System.getProperty("java.vendor")
                    + " "+System.getProperty("java.version")
                    + ")");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
        conn.setRequestProperty("Pragma", "no-cache");
        
        String data="";
        for(int j=0; j<key.length;j++){
            data+=data.equals("")
                    ? URLEncoder.encode(key[j],coding)+"="+URLEncoder.encode(value[j],coding)
                    : "&"+URLEncoder.encode(key[j],coding)+"="+URLEncoder.encode(value[j],coding);
        }
        
        PrintWriter writer = new PrintWriter(conn.getOutputStream());
        writer.print(data);
        writer.close();
        System.out.println(conn.getResponseMessage());
        System.out.println(conn.getURL());            
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), coding));
        String line="";
        while ((reader.readLine()) != null) {
            line += reader.readLine();
        }
        reader.close();
        return line;
    }


На выходе NULL , в чем может быть проблема?

Это сообщение отредактировал(а) MilordReny - 22.3.2012, 17:53
PM MAIL   Вверх
Samotnik
Дата 22.3.2012, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Цитата(MilordReny @  22.3.2012,  17:40 Найти цитируемый пост)
На выходе NULL , в чем может быть проблема?

блин, тут 40 строк простого кода, неужели трудно их продебажить и понять самому?  smile 

Что значит на выходе null? Если речь о возвращаемом значении, то оно впринципе не может быть null, ты его сам, явно, пустой сторой инициализируешь, а условие не дает записать туда null. Если речь о том, что line на выходе пустое, то смотри в условие, либо содержимое reader.readLine(), оно может быть пусто

Это сообщение отредактировал(а) Samotnik - 22.3.2012, 20:10
PM MAIL   Вверх
MilordReny
Дата 22.3.2012, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Samotnik, извиняюсь. Я не правильно поставил вопрос. Я хотел обратить внимание на код, все ли с ним нормально. Может что лишнее отправляю. А так спасибо за подсказку, reader.readLine() тоже null выдает. Значит код робит.

Я просто пытался код php
Код

$url = 'https://xxxxxxxxx';
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, 
http_build_query(array('user' => 'xxxxxx',
'pass' => 'xxxxxxx',
'tid' => 'xxxxxxx')));
$result = curl_exec($ch);

преобразовать в java, но мне это не удается, поскольку запрос в php выдает нужный результат, а мой NULL.

Если кто сможет помочь, я буду благодарен, денюжку заплочу если надо. Если не хватает информации, готов выложить, просто не знаю как этот скрипт на java заставить работать.

Это сообщение отредактировал(а) MilordReny - 22.3.2012, 20:28
PM MAIL   Вверх
MilordReny
Дата 22.3.2012, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Ураааааа, я разобрался!!!

Кароче заменил
Код

BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), coding));
        String line="";
        while ((reader.readLine()) != null) {
            line += reader.readLine();
        }
        reader.close();
        return line;


на код
Код

StringBuffer result = new StringBuffer();
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), coding));
        String line;
        while ((line = reader.readLine()) != null) {
            result.append(line).append("\n");
        }
        reader.close();
        conn.disconnect();
        return result.toString();


Все-таки дело было в коде)) всем спасибо за внимание!

Это сообщение отредактировал(а) MilordReny - 22.3.2012, 22:13
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0991 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.