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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не выполняется запрос POST 
:(
    Опции темы
anadiz
Дата 3.12.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Посылается запрос методом POST. Пример взят из ВТК, добавлены только строки запроса(request). Соединение с сервером происходит(это видно из логов сервера) но запрос не выполняется. 
Код

 void postViaHttpConnection(String url) throws IOException {
        int status = 0;
        HttpConnection c = null;
        InputStream is = null;
        OutputStream os = null;
        String InpNick="some_nick";
        String request = "nick="+InpNick; 
        try {
            c = (HttpConnection)Connector.open(url);

            // Set the request method and headers
            c.setRequestMethod(HttpConnection.POST);
            c.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0");
            c.setRequestProperty("Content-Language", "en-US");
            c.setRequestProperty("content-type", "application/x-www-form-urlencoded");
            c.setRequestProperty("content-length", "request.length()");
            // Getting the output stream may flush the headers
            os = c.openOutputStream();
            os.write(request.getBytes());
            //os.flush(); // Optional, openInputStream will flush

            // Get the status code, causing the connection to be made
            status = c.getResponseCode();

            // Any 500 status number (500, 501) means there was a server error 
            if ((status == HttpConnection.HTTP_NOT_IMPLEMENTED) ||
                    (status == HttpConnection.HTTP_VERSION) ||
                    (status == HttpConnection.HTTP_INTERNAL_ERROR) ||
                    (status == HttpConnection.HTTP_GATEWAY_TIMEOUT) ||
                    (status == HttpConnection.HTTP_BAD_GATEWAY)) {
                System.err.print("WARNING: Server error status [" + status + "] ");
                System.err.println("returned for url [" + url + "]");

                if (is != null) {
                    is.close();
                }

                if (os != null) {
                    os.close();
                }

                if (c != null) {
                    c.close();
                }

                return;
            }

            // Only HTTP_OK (200) means the content is returned.
            if (status != HttpConnection.HTTP_OK) {
                throw new IOException("Response status not OK [" + status + "]");
            }

            // Open the InputStream and get the ContentType
            is = c.openInputStream();

            String type = c.getType();
            processType(type);

            // Get the length and process the data
            int len = (int)c.getLength();

            if (len > 0) {
                byte[] data = new byte[len];
               int actual = is.read(data);
               process(data);
            } else {
                int ch;

                while ((ch = is.read()) != -1) {
                    process((byte)ch);
                }
            }
        } finally {
            if (is != null) {
                is.close();
            }

            if (os != null) {
                os.close();
            }

            if (c != null) {
                c.close();
            }
        }
    }


 на сервере лежит php скрипт с содержанием
Код

<?php


    $NICK=$_POST['nick'];
    echo $NICK;    
 ?>



все темы ниже про POST прочитаны, не помогло.
PM MAIL   Вверх
VOS
Дата 4.12.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Навскидку

c.setRequestProperty("content-length", "request.length()"); 

строку  "request.length()"  попробуйте заменить на размер передаваемых данных  ;)
PM MAIL   Вверх
anadiz
Дата 4.12.2007, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(VOS @ 4.12.2007,  10:02)
Навскидку

c.setRequestProperty("content-length", "request.length()"); 

строку  "request.length()"  попробуйте заменить на размер передаваемых данных  ;)

Не помогло, к сожалению
PM MAIL   Вверх
Antropoid
Дата 4.12.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



какую ошибку выдает клиент?


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
VOS
Дата 4.12.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Проверьте еще url на который отправляете запрос. Раз php скорее всего Linux, а он различает регистр букв.
Ну и http:// должен url включать.

PM MAIL   Вверх
W0LF
Дата 4.12.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



Цитата

Код

c.setRequestProperty("content-type", "application/x-www-form-urlencoded");
c.setRequestProperty("content-length", "request.length()");


заменить на
c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
c.setRequestProperty("Content-Length", request.length());
[/code]
User-Agent можешь ваще убрать


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
anadiz
Дата 4.12.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Antropoid @ 4.12.2007,  12:01)
какую ошибку выдает клиент?

Ошибки не выдает, просто запрос не выполняется. То есть не выводит NICK

Добавлено через 1 минуту и 13 секунд
Цитата(VOS @ 4.12.2007,  12:12)
Проверьте еще url на который отправляете запрос. Раз php скорее всего Linux, а он различает регистр букв.
Ну и http:// должен url включать.

Стучится верно, ибо в логах сервера видно, что обращения были, как раз к требуемому скрипту.
PM MAIL   Вверх
anadiz
Дата 4.12.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(W0LF @ 4.12.2007,  13:36)
Цитата

Код

c.setRequestProperty("content-type", "application/x-www-form-urlencoded");
c.setRequestProperty("content-length", "request.length()");


заменить на
c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
c.setRequestProperty("Content-Length", request.length());
[/code]
User-Agent можешь ваще убрать


 setRequestProperty(java.lang.String,java.lang.String) in javax.microedition.io.HttpConnection cannot be applied to (java.lang.String,int)
        c.setRequestProperty("Content-Length", request.length());

1 error
com.sun.kvem.ktools.ExecutionException
Build failed

PM MAIL   Вверх
eugine_s
Дата 4.12.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(anadiz @  4.12.2007,  16:08 Найти цитируемый пост)
setRequestProperty(java.lang.String,java.lang.String) in javax.microedition.io.HttpConnection cannot be applied to (java.lang.String,int)
        c.setRequestProperty("Content-Length", request.length());

1 error
com.sun.kvem.ktools.ExecutionException
Build failed


Преобразуй к String иначе ты вместо длины твоих данных отправляешь строку: request.length()  


Код

Integer.toString(int);



PM MAIL   Вверх
anadiz
Дата 4.12.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(eugine_s @ 4.12.2007,  16:16)
Цитата(anadiz @  4.12.2007,  16:08 Найти цитируемый пост)
setRequestProperty(java.lang.String,java.lang.String) in javax.microedition.io.HttpConnection cannot be applied to (java.lang.String,int)
        c.setRequestProperty("Content-Length", request.length());

1 error
com.sun.kvem.ktools.ExecutionException
Build failed


Преобразуй к String иначе ты вместо длины твоих данных отправляешь строку: request.length()  


Код

Integer.toString(int);

c.setRequestProperty("content-length", Integer.toString(request.length()));

запрос всё равно не прошел
PM MAIL   Вверх
VOS
Дата 4.12.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Бросьте код как выводите.
PM MAIL   Вверх
W0LF
Дата 4.12.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



Что говорит нетворк-монитор?


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
anadiz
Дата 4.12.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(VOS @ 4.12.2007,  17:11)
Бросьте код как выводите.

вывожу что именно?
код тот же, что был в начале темы, только с поправленной строкой
c.setRequestProperty("content-length", "request.length()");

PM MAIL   Вверх
dual
Дата 4.12.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пишут же люди, что нужно заменить
Код

c.setRequestProperty("content-length", Integer.toString(request.length()));

на 
Код

c.setRequestProperty("Content-Length", Integer.toString(request.length()));

Так же следует сделать и для всех остальных свойств. Т.е., первое слово и все слова после '-' пишутся с заглавной буквы.

Это сообщение отредактировал(а) dual - 4.12.2007, 20:37
PM MAIL   Вверх
anadiz
Дата 4.12.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

void postViaHttpConnection(String url) throws IOException {
        int status = 0;
        HttpConnection c = null;
        InputStream is = null;
        OutputStream os = null;
        String InpNick="some_nick";
        String request = "nick="+InpNick;
        try {
            c = (HttpConnection)Connector.open(url);

            // Set the request method and headers
            c.setRequestMethod(HttpConnection.POST);
            c.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0");
            c.setRequestProperty("Content-Language", "en-US");
        c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            c.setRequestProperty("Content-Length", Integer.toString(request.length()));
            // Getting the output stream may flush the headers
            os = c.openOutputStream();
            os.write(request.getBytes());
            //os.flush(); // Optional, openInputStream will flush

            // Get the status code, causing the connection to be made
            status = c.getResponseCode();

            // Any 500 status number (500, 501) means there was a server error 
            if ((status == HttpConnection.HTTP_NOT_IMPLEMENTED) ||
                    (status == HttpConnection.HTTP_VERSION) ||
                    (status == HttpConnection.HTTP_INTERNAL_ERROR) ||
                    (status == HttpConnection.HTTP_GATEWAY_TIMEOUT) ||
                    (status == HttpConnection.HTTP_BAD_GATEWAY)) {
                System.err.print("WARNING: Server error status [" + status + "] ");
                System.err.println("returned for url [" + url + "]");

                if (is != null) {
                    is.close();
                }

                if (os != null) {
                    os.close();
                }

                if (c != null) {
                    c.close();
                }

                return;
            }

            // Only HTTP_OK (200) means the content is returned.
            if (status != HttpConnection.HTTP_OK) {
                throw new IOException("Response status not OK [" + status + "]");
            }

            // Open the InputStream and get the ContentType
            is = c.openInputStream();

            String type = c.getType();
            processType(type);

            // Get the length and process the data
            int len = (int)c.getLength();

            if (len > 0) {
                byte[] data = new byte[len];
               int actual = is.read(data);
               process(data);
            } else {
                int ch;

                while ((ch = is.read()) != -1) {
                    process((byte)ch);
                }
            }
        } finally {
            if (is != null) {
                is.close();
            }

            if (os != null) {
                os.close();
            }

            if (c != null) {
                c.close();
            }
        }
    }


Всё равно ничего не передает(
PM MAIL   Вверх
VOS
Дата 5.12.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

  Ошибки не выдает, просто запрос не выполняется. То есть не выводит NICK


Хочется понять как Вы решили, что запрос не выполняется. Т.е. увидеть код, где Вы выводите полученные данные.
Ну и  измените Ваш скрипт php чтобы он отправлял Вам какие-нибудь статические данные + полученные. 
В идеале еще полученные данные в скрипте в файл сохраните. 

Это сообщение отредактировал(а) VOS - 5.12.2007, 10:09
PM MAIL   Вверх
dual
Дата 5.12.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня данный код работает правильно. Не знаю, что выполняют методы processType(type) и process(data), но запрос работает. Проверял на эмуляторе. В ответ получаю именно то, что (как я считаю) надо, т.е., зачение nick. 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




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


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

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