Re: httpcall result

От: Vladimir A. Butenko <CGatePro_at_mx_ru>
Дата: Tue 07 Mar 2006 - 14:41:52 MSK

On Tue, 07 Mar 2006 13:36:46 +0300
  "Oleg Shumsky" <CGatePro@mx.ru> wrote:
> Здравствуйте.
>
>

>>> Что реально пишет CGI скрипт? Какой Content-type у ответа?
>>>
>>>> Что мне нужно сделать в CG/PL, чтобы получить из этого удобоваримую 
>>>> строку ? ObjectoText(params.body) возвращает тоже самое. TextToObject
>>>> возаращает пустую строку.
>>>
>>
>> HTTPCall не возвращает строки. [<base64>] - это представление 
>> datablock. То есть он возвращает datablock.
>>
>> Например, если вы возвращаете audio/wav - то такой datablock можно 
>> отдать функции PlayFile(). А если вы вернули какой-то текст, то 
>> datablock можно превратить в текстовую "строку" функцией String().

>
>
> Либо я делаю что-то не так, либо не работает.

Да, STRING(data) создаёт текстовое представление этой data (то есть всё тот же [xxxx]), это я ошибся.   

> вот команды в cg/pl:
>
> paramshttp = NewDictionary();
> syslog(paramshttp);
> resulthttp = HTTPCall("http://xx.xx.xx.xx/cgi-bin/test.cgi",paramshttp);
> if resulthttp != null then

Тут должно было быть

    if IsDictionary(resultHttp) then

> syslog(resulthttp);
> syslog(String(resulthttp.body));
> else
> syslog("HTTP Error Result: " + resulthttp);
> end if;
>
>
> Вот лог:
>
> 13:21:23.01 5 HTTPO-00055 inp: HTTP/1.1 200 OK
>

>

> 13:21:23.01 5 HTTPO-00055 inp: Date: Tue, 07 Mar 2006 10:21:22 GMT
> 13:21:23.01 5 HTTPO-00055 inp: Server: Apache/1.3.34 (Unix) mod_perl/1.29
> 13:21:23.01 5 HTTPO-00055 inp: Content-length: 3
> 13:21:23.01 5 HTTPO-00055 inp: Keep-Alive: timeout=15, max=100
> 13:21:23.01 5 HTTPO-00055 inp: Connection: Keep-Alive
> 13:21:23.01 5 HTTPO-00055 inp: Content-Type: text/html
> 13:21:23.01 5 HTTPO-00055 inp:
> 13:21:23.01 4 HTTPO-00055 suspending protocol
>
>
> 13:21:23.01 2 PBXLEG-00416 ProgramLog: {Content-Subtype=html;Content-Type=text;Date=#T07-03-2006_10:21:22;Server="Apache/1.3.34 (Unix) mod_perl/1.29";body=[YT1i];responseCode=#200;}

> апач на самом деле возвращает строку вида "a=b"
>
> В body мы видим эту строку в base64.
>
> в скрипте на cg/pl есть слудующая команда:
>
> syslog(String(resulthttp.body));
>
> в логе мы видим
>
> 13:21:23.01 2 PBXLEG-00416 ProgramLog: "[YT1i]"
> Вопрос: как мне получить "a=b" ?

Так - никак (пока). Надо возвращать не просто текст, а именно какое-то данное, которое Вам нужно - строку, массив, IP address, и так далее. Для чего
Ваш "Апач" должен выдавать не

   a=b
а

   "a=b"

И тогда TextToObject(resulthttp.body) выдаст Вам (считает) этот об"ект.

Но мы, наверное, сделаем всё-таки, чтобы String(datablock) выдавал содержимое этого блока как String (до первого нуля в этом блоке, если таковой имеется).

> Oleg V. Shumsky
> Corbina Telecom NOC, VoIP Dept. Ph.: +7 495 7284000, ext. 2174, ICQ:
>110474048

Sincerely,
Vladimir Получено Tue Mar 07 11:41:18 2006

Этот архив был сгенерирован hypermail 2.1.8 : Fri 24 Apr 2015 - 16:14:47 MSK