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
 
Да, это действительно был какой-то локальный глюк - то ли меня, то ли эмулятора.


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

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