PDA

Просмотр полной версии : Как в J2ME отправить POST данные по HTTP?



mobius
15.03.2005, 16:48
Как в J2ME отправить POST данные по HTTP? Конеретней интересует непосредственно передача данных. Всем спасибо!

bulda
15.03.2005, 16:54
А доки почитать не пробывал, или есть какой-то конкретный вопрос?

mobius
15.03.2005, 17:31
Есть конкретный:
как указать, что запрос именно POST - вопросов нет.
А вот как переменную задать? Так же, как при GET формируется URL?

c = (HttpConnection) Connector.open("http://" + URL + "?login=" +
login + "&passwd=" + password);
c.setRequestMethod(HttpConnection.POST);
is = c.openDataInputStream();

Я правильно понял?

bulda
15.03.2005, 18:33
Да, все абсолютно правильно.

mobius
15.03.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";
}?>
т.есть в пременных ничего нет :/

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

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

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

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

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

Deady
16.03.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

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

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

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

login=blablabla&password=xxx

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