|
10.01.2008, 22:14
|
#1
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Lib_web: работа с http, корректная обработка POST
Была написана как раз для корректной обработки POST запросов.
01.08.2008
+добавлена функция function get_stream : resource;
Возвращает входной поток от сервера. Вызывается только после send!
03.01.2009
*изменил процесс подключения. Происходит в отдельном потоке, можно прервать. Подробности смотрим в примере. Для тех кому это не нужно оставил первоначальную версию.
Последний раз редактировалось Piligrim, 04.01.2009 в 01:39.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Piligrim за это полезное сообщение:
|
|
25.01.2008, 18:47
|
#2
|
Оператор ЭВМ
Регистрация: 08.03.2007
Сообщений: 20
Написано одно полезное сообщение
|
Ответ: Lib_web: работа с http, корректная обработка POST
А можно пример по использованию?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.01.2008, 21:23
|
#3
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: Lib_web: работа с http, корректная обработка POST
К сожалению полный пример не сохранился, но получается что-то похожее:
program Http;
uses web;
begin
if web.open('http://tut.by')=-1 then
debug('1');
debug(web.get_name(0));
debug(web.get_name(1));
debug(web.get_name(2));
drawText('Hello world!', 0, 0);
repaint;
delay(2000);
end.
|
(Offline)
|
|
25.01.2008, 21:53
|
#4
|
ПроЭктировщик
Регистрация: 18.12.2007
Сообщений: 157
Написано 24 полезных сообщений (для 27 пользователей)
|
Ответ: Lib_web: работа с http, корректная обработка POST
А POST запросы как отправлять?
|
(Offline)
|
|
26.01.2008, 11:40
|
#5
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: Lib_web: работа с http, корректная обработка POST
program SmsSender;
uses sms, web, ui;
var
conn: http;
dest_id, text_id, id, res: integer;
dest, text: string;
cmd, cmdHttp, cmdSms, cmdExit, cmdSelect, cmdCancel: command;
procedure showError(error: string);
begin
showAlert('Error', 'sending incomplete: '+error, loadImage('/icon.png'), ALERT_ERROR);
delay(3000);
end;
procedure getCommand;
begin
cmd:= EmptyCommand;
repeat
cmd := GetClickedCommand;
until cmd <> EmptyCommand;
end;
function getSms(title: string; dst: string): boolean;
begin
ClearForm;
ShowForm;
SetFormTitle(title);
dest_id:= FormAddTextField('Dest number', dst, 20, TF_PHONENUMBER);
text_id:= FormAddTextField('SMS text', '', 450, TF_ANY);
AddCommand(cmdCancel);
AddCommand(cmdSelect);
getCommand;
if cmd=cmdSelect then begin
dest:= FormGetText(dest_id);
text:= FormGetText(text_id);
end;
getSms:= cmd=cmdSelect;
end;
begin
cmdExit := CreateCommand('Exit', CM_EXIT, 1);
cmdSelect := CreateCommand('OK', CM_OK, 1);
cmdCancel := CreateCommand('Cancel', CM_CANCEL, 1);
cmd:= EmptyCommand;
repeat
ShowMenu('Main menu', CH_IMPLICIT);
id:= MenuAppendString('SMS');
id:= MenuAppendString('WebForm SMS');
id:= MenuAppendString('e-mail to SMS');
id:= MenuAppendString('e-mail');
AddCommand(cmdExit);
ui.list_set_select_command(cmdSelect);
getCommand;
if cmd=cmdSelect then begin
id:= MenuGetSelectedIndex;
Debug(IntegerToString(id));
if id=0 then
if getSms('Send SMS', '+37529') then begin
id:= -1;
if sms.send('sms://'+dest, text)=0 then
showError('');
end;
Debug(IntegerToString(id));
if id=1 then
if getSms('Send WebForm', '37529') then begin
id:= -1;
if web.open('http://www.freesms.mts.by/cgi-bin/cgi.exe?function=sms_send')<>0 then begin
web.set_method('POST');
res:= 0;
if web.set_body('MMObjectType=0&MMObjectID=&To='+dest+'&Msg='+text+'&count='+
IntegerToString(Length(text))+'&Hour=0&Min=0&Day=1&Mon=05&Year=2006&Lang=2')<>0 then
res:= web.send;
if res<>200 then
showError(IntegerToString(res));
web.close;
end;
end;
end;
until cmd=cmdExit;
end.
например
|
(Offline)
|
|
12.02.2008, 00:04
|
#6
|
AnyKey`щик
Регистрация: 09.12.2007
Сообщений: 2
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Lib_web: работа с http, корректная обработка POST
Вопрос: На реальном телефоне к заголовку User Agent прибавляется UNTRUSTED/1.0 . Это можно как-то обойти не прибегая к сертификации приложения, ибо очень разная она на всех телефонах.
|
(Offline)
|
|
12.02.2008, 18:39
|
#7
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_web: работа с http, корректная обработка POST
Врятли, это скорее всего идет чисто на уровне JVM.
|
(Offline)
|
|
28.04.2008, 03:52
|
#8
|
ПроЭктировщик
Регистрация: 13.11.2006
Сообщений: 101
Написано 6 полезных сообщений (для 6 пользователей)
|
Re: Lib_web: работа с http, корректная обработка POST
Чёйт я туплю, как заголовок то здесь передать?
|
(Offline)
|
|
01.05.2008, 02:13
|
#9
|
ПроЭктировщик
Регистрация: 13.11.2006
Сообщений: 101
Написано 6 полезных сообщений (для 6 пользователей)
|
Re: Lib_web: работа с http, корректная обработка POST
Граждане, чего я не так делаю?
Program icq_test;
uses web;
var
i: integer;
s: string;
begin
i:=web.open('http://wap.wapsib.ru/sajt/icq_mess/index.php');
debug(''+i);
web.set_method('POST');
web.set_property('Referer','http://wap.wapsib.ru/sajt/icq_mess/index.php');
web.set_property('Content-Type','application/x-www-form-urlencoded');
web.set_property('Content-Length',''+91);
i:=web.set_body('uin=111111111&text=prevedmedved&send=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C');
debug(''+i);
i:= web.send;
debug(''+i);
s:=get_response;
debug(s);
web.close;
end.
сервак возвращает: "411 Length Required"
Колбасил всё по разному, порядок менял, заголовки добавлял, удалял разные, один хрен, как будто библиотека их не передаёт.
|
(Offline)
|
|
01.05.2008, 13:00
|
#10
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_web: работа с http, корректная обработка POST
Похоже должен еще присутствовать параметр Length, наверное это длина сообщения.
Попробуйте в set_body добавить [b]&length=x[b], где x - длина сообщения.
|
(Offline)
|
|
01.05.2008, 23:00
|
#11
|
ПроЭктировщик
Регистрация: 13.11.2006
Сообщений: 101
Написано 6 полезных сообщений (для 6 пользователей)
|
Re: Lib_web: работа с http, корректная обработка POST
Live HTTP header под мозилой вот это перехватывает:
http://wap.wapsib.ru/sajt/icq_mess/index.php
POST /sajt/icq_mess/index.php HTTP/1.1
Host: wap.wapsib.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru,ru-ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://wap.wapsib.ru/sajt/icq_mess/index.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 91
uin=111111111&text=prevedmedved&send=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C
HTTP/1.x 200 OK
Server: DataPalm/2.5.7
Date: Thu, 01 May 2008 17:55:27 GMT
Content-Type: text/html
Content-Length: 89
Connection: Keep-Alive
Так что длина вроде в заголовке передаётся.
Я просто сперва думал, что set_property это не к хидерам относится, потом посмотрел исходник библиотеки, погуглил - получается всё-таки оно самое.
Последний раз редактировалось EVIL_USER, 01.05.2008 в 23:07.
|
(Offline)
|
|
29.07.2008, 16:11
|
#12
|
AnyKey`щик
Регистрация: 16.07.2008
Сообщений: 3
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Lib_web: работа с http, корректная обработка POST
У меня тоже проблемма с ответом 411, кто нибудь придумал как обойти?, если да то напишите в аську плиз 192068616
|
(Offline)
|
|
03.08.2008, 18:35
|
#13
|
ПроЭктировщик
Регистрация: 02.07.2008
Сообщений: 105
Написано 7 полезных сообщений (для 14 пользователей)
|
Ответ: Lib_web: работа с http, корректная обработка POST
pilgrim, я никак не могу победить обновлённую версию библиотеки.
Получаю данные не как stream, а просто через web.get_response;
В старой версии работало, а новая версия выдаёт:
java.io.IOException: unexpected end of stream
|
(Offline)
|
|
08.08.2008, 11:37
|
#14
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: Lib_web: работа с http, корректная обработка POST
program WebDemo; uses web; var a : integer; begin if web.open('http://piligrim.wapland.org')<>0 then begin a := web.send; if a<>200 then Debug('answer: '+a); drawText(web.get_response, 0, 0); web.close; end; repaint; delay(2000); end.
нормально получает страницу. библиотека не переделывалась, просто добавлена одна функция
|
(Offline)
|
|
10.08.2008, 21:15
|
#15
|
ПроЭктировщик
Регистрация: 02.07.2008
Сообщений: 105
Написано 7 полезных сообщений (для 14 пользователей)
|
Ответ: Lib_web: работа с http, корректная обработка POST
Да, это действительно был какой-то локальный глюк - то ли меня, то ли эмулятора.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:23.
|