Как в J2ME отправить POST данные по HTTP?

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Как в J2ME отправить POST данные по HTTP?

mobius » 17 мар 2005, 12:25

прикол был в чём, не нужно os.flush() делать, он туда всякий мусор сыпал, вот и ошибки были, всем спасибо!

bulda » 16 мар 2005, 17:01

Serverside скрипты как правило умеют вытаскивать параметры из тела цикла POST. Надо что бы параметры записывались в стандартном виде. Что то типа

login=blablabla&password=xxx

Deady » 16 мар 2005, 15:00

задавая параметры в строке, ты автоматически предполагаешь использование get.
post параметры передаются в теле запроса.

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

Deady » 16 мар 2005, 14:55

Example using POST with HttpConnection

Post a request with some headers and content to the server and process the headers and content.

Connector.open is used to open url and a HttpConnection is returned. The request method is set to POST and request headers set. A simple command is written and flushed. The HTTP headers are read and processed. If the length is available, it is used to read the data in bulk. From the HttpConnection the InputStream is opened. It is used to read every character until end of file (-1). If an exception is thrown the connection and stream is closed.


void postViaHttpConnection(String url) throws IOException {
HttpConnection c = null;
InputStream is = null;
OutputStream os = null;

try {
c = (HttpConnection)Connector.open(url);

// Set the request method and headers
c.setRequestMethod(HttpConnection.POST);
c.setRequestProperty("If-Modified-Since",
"29 Oct 1999 19:43:31 GMT");
c.setRequestProperty("User-Agent",
"Profile/MIDP-1.0 Configuration/CLDC-1.0");
c.setRequestProperty("Content-Language", "en-US");

// Getting the output stream may flush the headers
os = c.openOutputStream();
os.write("LIST games\n".getBytes());
os.flush(); // Optional, openInputStream will flush

// Opening the InputStream will open the connection
// and read the HTTP headers. They are stored until
// requested.
is = c.openInputStream();

// Get the ContentType
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();
}
}



взято из javadoc для MIDP 2.0

mobius » 16 мар 2005, 11:33

Вот в том-то и дело, что примеры из SDK не работают!
тоже 411-я

bulda » 16 мар 2005, 11:26

попробуй поспрашивать знатаков HTTP и serverside, с J2ME у тебя все выглядит нормальным. Возми пару примеров из разных SDK, gjcjvnhb работают ли он, если работают то найди отличия в коде, если нет то вероятно с серваком, что то не то.

mobius » 16 мар 2005, 10:22

Когда я делаю
os.flush();
то c.getResponseCode() = 411, а не HTTP_OK
Причем всё как в доке.
В чём может быть причина?

mobius » 16 мар 2005, 09:39

Млин, у меня не выходит всё-таки передать данные постом :(

bulda » 15 мар 2005, 21:26

а ты их не посылаешь в теле POST, а из URL вроде ни кто не обещал автоматом вытаскивать login и password. Скрипт получает массив из запроса пост, URL он не парсит, в POST запросе ничего нет.
Я не силен в серверной части, но если ничего не путаю, то URL парсится на предмет передаваемых параметров только при GET запросах.

mobius » 15 мар 2005, 18:40

Почему-то следующий скрипт не выводит login и passwd :/
<?$req = getenv('REQUEST_METHOD');
if (isset($login)){
$c = chr(10);
echo "SID{$req}{$c}KEY1{$_POST['login']}{$c}KEY2{$_POST['passwd']}";
} else {
echo "ERROR: 250";
}?>
т.есть в пременных ничего нет :/

Вернуться к началу