forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_web: работа с http, корректная обработка POST (http://forum.boolean.name/showthread.php?t=5546)

Piligrim 10.01.2008 22:14

Lib_web: работа с http, корректная обработка POST
 
Вложений: 2
Была написана как раз для корректной обработки POST запросов.

01.08.2008
+добавлена функция function get_stream : resource;
Возвращает входной поток от сервера. Вызывается только после send!

03.01.2009
*изменил процесс подключения. Происходит в отдельном потоке, можно прервать. Подробности смотрим в примере. Для тех кому это не нужно оставил первоначальную версию.

fads 25.01.2008 18:47

Ответ: Lib_web: работа с http, корректная обработка POST
 
А можно пример по использованию?

Piligrim 25.01.2008 21:23

Ответ: 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.


cHeRsAnYa 25.01.2008 21:53

Ответ: Lib_web: работа с http, корректная обработка POST
 
А POST запросы как отправлять?

Piligrim 26.01.2008 11:40

Ответ: 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.

например

Stalk 12.02.2008 00:04

Re: Lib_web: работа с http, корректная обработка POST
 
Вопрос: На реальном телефоне к заголовку User Agent прибавляется UNTRUSTED/1.0 . Это можно как-то обойти не прибегая к сертификации приложения, ибо очень разная она на всех телефонах.

ViNT 12.02.2008 18:39

Ответ: Lib_web: работа с http, корректная обработка POST
 
Врятли, это скорее всего идет чисто на уровне JVM.

EVIL_USER 28.04.2008 03:52

Re: Lib_web: работа с http, корректная обработка POST
 
Чёйт я туплю, как заголовок то здесь передать? :dontknow:

EVIL_USER 01.05.2008 02:13

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"
Колбасил всё по разному, порядок менял, заголовки добавлял, удалял разные, один хрен, как будто библиотека их не передаёт.

ViNT 01.05.2008 13:00

Ответ: Lib_web: работа с http, корректная обработка POST
 
Похоже должен еще присутствовать параметр Length, наверное это длина сообщения.
Попробуйте в set_body добавить [b]&length=x[b], где x - длина сообщения.

EVIL_USER 01.05.2008 23:00

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 это не к хидерам относится, потом посмотрел исходник библиотеки, погуглил - получается всё-таки оно самое.

Vinni37 29.07.2008 16:11

Ответ: Lib_web: работа с http, корректная обработка POST
 
У меня тоже проблемма с ответом 411, кто нибудь придумал как обойти?, если да то напишите в аську плиз 192068616

Skythrone 03.08.2008 18:35

Ответ: Lib_web: работа с http, корректная обработка POST
 
pilgrim, я никак не могу победить обновлённую версию библиотеки.

Получаю данные не как stream, а просто через web.get_response;

В старой версии работало, а новая версия выдаёт:
java.io.IOException: unexpected end of stream

Piligrim 08.08.2008 11:37

Ответ: Lib_web: работа с http, корректная обработка POST
 
PHP код:

program WebDemo;
uses web;
var
    
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_response00);
            
web.close;
    
end;
    
repaint;    
    
delay(2000);
end

нормально получает страницу. библиотека не переделывалась, просто добавлена одна функция

Skythrone 10.08.2008 21:15

Ответ: Lib_web: работа с http, корректная обработка POST
 
Да, это действительно был какой-то локальный глюк - то ли меня, то ли эмулятора.

Skythrone 10.08.2008 21:16

Ответ: Lib_web: работа с http, корректная обработка POST
 
pilgrim, а есть ли возможность устанавливать таймауты на соединение?

Дело в том, что в случае очень плохой связи (поезд в метро) сеть в телефоне есть только формально, а реально ничего не скачать.
Но мидлет бесконечно пытается, и в итоге зависает. :(

Piligrim 10.08.2008 23:23

Ответ: Lib_web: работа с http, корректная обработка POST
 
можно. сделаю.

Fialka 02.12.2008 13:35

Ответ: Lib_web: работа с http, корректная обработка POST
 
Привет всем! Такой вопрос: Необходимо тупо получить ответ с HTTP сервера типа "http://server.com/script.php?p=1&r=2", запросы стандартным методом OpenHttp/SendHttpMessage работают на эмуляторе, но НЕ работают на некоторых телефонах. Есть ли какая-нибудь библиотека которая ОДНОЗНАЧНО работает на всех телефонах?

Fialka 03.12.2008 00:02

Ответ: Lib_web: работа с http, корректная обработка POST
 
про UNTRUSTED... http://forum.boolean.name/showpost.p...4&postcount=26

Piligrim 03.12.2008 01:15

Ответ: Lib_web: работа с http, корректная обработка POST
 
хм, если бы у меня были все телефоны, я бы смог сделать такую библиотеку.

Fialka 03.12.2008 17:17

Ответ: Lib_web: работа с http, корректная обработка POST
 
Привет! Спасибо за ответы. У меня еще 2 вопроса:
1. как подписать приложение?
2. как правильно при помощи HTTPConnection получить страницу с сайта?
Код:

      if OpenHttp(conn, 'http://server.com/test.php?' + req) then begin
        SetHttpMethod(conn, GET);
        SayWaiting('Запрос...');
        if SendHttpMessage(conn) = 200 then begin
          SayWaiting('Ответ...');
          sendreq := GetHttpResponse(conn);
          CloseHttp(conn);
        end;
      end;

так? ...и еще после компиляции надо заменить H.class?

или при помощи ЭТОЙ (сабж) библиотеки ПРАВИЛЬНЕЕ?

Piligrim 04.12.2008 10:12

Ответ: Lib_web: работа с http, корректная обработка POST
 
1. Чтобы подписать приожение нужен сертификат. Обычно его покупают :). Есть ее Halmer для SnyEricsson. Программа для подписывания входит в состав WTK
2. Для GET подменять ничего не нужно. Замена требуется только для POST.

Fialka 04.12.2008 11:49

Ответ: Lib_web: работа с http, корректная обработка POST
 
Простите меня, бестолкового...
Так для моего случая (GET запрос) вышеприложенный код "улучшить" нельзя (мож че неправильно)? А то он (код) не на всех телефонах работает...
Или лучше написать при помощи ЭТОЙ библиотеки?

P.S. Короче... ЭТА библиотека лучше (правильнее) той, что в МР?
P.P.S. КАК надо написать, чтоб на всех телефонах работало?

Заранее спасибо!

Piligrim 06.12.2008 12:51

Ответ: Lib_web: работа с http, корректная обработка POST
 
библиотека не дает никаких преимуществ для GET, разве что только чтение заголовков. Принцип работы с сетью один и тот же.
Не работает как я понимаю на нокии. :( ну нет у меня нокии для тестов что ей не нравится.

Fialka 06.12.2008 13:23

Ответ: Lib_web: работа с http, корректная обработка POST
 
...Не работает на смартах.

Skythrone 16.12.2008 21:34

Ответ: Lib_web: работа с http, корректная обработка POST
 
Pilgrim, а не мог бы ты сделать в этой библиотеке таймауты?

Чтобы при запросе можно было выставлять максимально время ожидания ответа. Например, если через 20 секунд коннект не налажен, то возвращать отлавливаемую ошибку.

А то сейчас если сеть лагает, то мидлет просто зависает.

Piligrim 17.12.2008 10:16

Ответ: Lib_web: работа с http, корректная обработка POST
 
Хорошо. Как лучше сделать? CallBack или код ошибки другой?

Skythrone 17.12.2008 11:36

Ответ: Lib_web: работа с http, корректная обработка POST
 
Я предлагаю просто другой код ошибки.

Piligrim 04.01.2009 01:40

Ответ: Lib_web: работа с http, корректная обработка POST
 
Skythrone, пробуйте. Сделал немного по-другому. Но думаю, правильней.

b00bl1k 10.05.2009 16:48

Ответ: Lib_web: работа с http, корректная обработка POST
 
Pilgrim, заметил одну особенность: если сервак возвращает поле location в заголовке, то запрос автоматически перенаправляется на url, указанный в этом поле. Можно как то это предотвратить (проверял на kemulator)?

odd 11.05.2009 18:12

Ответ: Lib_web: работа с http, корректная обработка POST
 
Недавно столкнулся с проблемой корректной отправки POST запросов.
Версия web2 работает некорректно, но первая web работает замечательно. Спасибо за библиотеку.

IVenoMI 12.05.2009 20:00

Re: Lib_web: работа с http, корректная обработка POST
 
Возникло пару вопросиков по либе.
1. - Ни одна версия не работает на Нокиях? Недавно запцстил на Нокии прожку, в которой реализуется простейший ГЕТ запрос - после момента выдачи запроса от телефона "азрешить доступ в сеть?" и выбора подключения, мидлет наглухо завис.

2. Что делать если необходимо получить куки, передаваемые ресурсом?
web.get_geadet ('Set-Cookie') - возвращает только первій из передаваеміх. как біть если необходимо получить все?

minibt 25.05.2009 09:17

Re: Lib_web: работа с http, корректная обработка POST
 
Вложений: 1
Для всех у кого не работает POST, ошибка 411.
Используйте из приложенного файла set_body2(s: string), Content-Length можно не устанавливать.

To IVenoMI.
Получить все куки (все поля) через web.get_name(i: integer), перебери все поля пока get_name не станет возращать пустую строку.

Код:

cookie:=''; 
i:=0; rs:=get_name(i);
repeat
    //get_name2 возвращает имя поля, у меня в либе
    //if get_name2(i)='Set-Cookie' then cookie:=cookie+rs+'; ';
    cookie:=cookie+rs+'; '; // в cookie все поля записываем
    inc(i);
    rs:=get_name(i);
until rs='';

Вложение 6086

IVenoMI 25.05.2009 23:43

Re: Lib_web: работа с http, корректная обработка POST
 
Большое вам человеческое данкешон)

IVenoMI 03.06.2009 16:09

Re: Lib_web: работа с http, корректная обработка POST
 
Кхм... Не работает, однако... Теперь не возвращается ни одного значения куков.

Можно более вразумительный пример?

cherepets 26.01.2010 10:50

Ответ: Lib_web: работа с http, корректная обработка POST
 
решил перейти на какую-нить либу для веба вместо стандартных функций. со стандартом такая проблема:
на эмуле все работает, а телефон зависает иногда (например при русских буквах в ГЕТ) (((

в либе веб столкнулся с неменьшими проблемами...

в 1ой:
компилится все норм, но потом вылазит java.lang.NullPointerExpection, c сервера возвращается -1, вместо 200.

со 2ой все гораздо более странно:
не компилится, пишет в первой строке строчная константа содержит переход на новую строку, а так же неизвестные идентификатор ')'.

какие есть идеи?

odd 26.01.2010 13:30

Ответ: Lib_web: работа с http, корректная обработка POST
 
Ошибка -1 указывает на полное отсутствие связи в телефоне.
Проверь настройки Интернета в телефоне или возможно неправильно задан запрос файла.

cherepets 26.01.2010 14:26

Ответ: Lib_web: работа с http, корректная обработка POST
 
связь точно есть, стандартными функциями ж коннектится, да и к тому же на эмуляторе тоже самое. запрос формирую так же как и стандартными функциями.
просто стандартные натыкаясь на какой-то символ вешают телефон, а я не могу понять на какой...
можно конечно кодировать все (чтоб уж точно), но это лишний трафик, что для телефонов критично.

Demon_12 09.02.2010 17:36

Ответ: Lib_web: работа с http, корректная обработка POST
 
У меня несколько полей в возвращаемом заголовке
с названием set-cookie
используя get_header('set-cookie') я получаю только первый из них,
а мне нужны все. Как это сделать?? :SOS:

Deport 02.11.2013 22:24

Ответ: Lib_web: работа с http, корректная обработка POST
 
Знаете почему мидлет паскаль умирает? да потому что нет того кто мог бы дать примерчик....а гадать что куда подставлять и печатать не каждому дано( я пролистал 3 страницы а так и не понял как получить ошибку связи или хреновый сигнал чтоб по новой цикл запустить.....

SBJoker 03.11.2013 00:42

Ответ: Lib_web: работа с http, корректная обработка POST
 
Вообще-то он умер ещё 3 года назад. И по-этому некому помочь, т.к. видимо не осталось тех кто что-то знал об этом.

odd 14.11.2013 18:21

Ответ: Lib_web: работа с http, корректная обработка POST
 
Да просто все сейчас кодят под iOS или Android поэтому и вполне закономерно, что интерес к MP упал.


Часовой пояс GMT +4, время: 09:08.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot