Декомпрессия ответа

Запрос
Ответ
Реализация

Декомпрессия ответа

Ответ сервера Postcalc.RU всегда архивируется в gzip (за исключением экспериментального формата plain). Для декомпрессии добавьте строчку:
$Request = 'http://api.postcalc.ru/?'.$QueryString;
$Response = file_get_contents($Request) or die('Can not connect!');
// Добавляем распаковку:
if ( substr($Response,0,3) == "\x1f\x8b\x08" ) $Response=gzinflate(substr($Response,10,-8));
Внимание! На платформе Битрикс наблюдается следующее нестандартное поведение: функция gzinflate не блокируется, однако после распаковки поток усекается на несколько байт.
Это связано с установкой PHP mbstring.func_overload. Поэтому проводите распаковку так:
if (substr($Response, 0, 3) ==  "\x1f\x8b\x08") {
  $funcOverload = ini_get("mbstring.func_overload");
  if (in_array($funcOverload, array(2, 3, 6, 7,))) {
    $Response = gzinflate( substr($Response, 10, -1) );
  } else {
    $Response = gzinflate( substr($Response, 10, -8) );
  }    
}
Если это не поможет, замените полностью вызов file_get_contents() с последующей декомпрессией функцией gzinflate() на аналогичный вызов fopen() с применением обработчиков компрессии:
$Request = 'http://api.postcalc.ru/?'.$QueryString;
$fp = fopen("compress.zlib://$Request", "rb");
$Response = stream_get_contents($fp);
fclose($fp);

Внимание! Для разархивации на платформе 1C можно применить вызов из командной строки внешней программы:
ПараметрыGET = "?f=101000&t=190000&w=1000&c=RU&o=wddx&key=test" + 
    "&w=" + Формат(Вес,"ЧГ=0") + 
    "&v=" + Формат(Окр(Ценность),"ЧГ=0") +
    "&t=" + Индекс;
 

    ИмяФайлаАрхива = КаталогВременныхФайлов() + "postcalc_new.zip";
    ХТМЛ = Новый HTTPСоединение("api.postcalc.ru");  
    ХТМЛ.Получить(ПараметрыGET,ИмяФайлаАрхива);
	СтрокаКоманды = """C:\Program Files\WinRar\winrar.exe"" e -y """ +  ИмяФайлаАрхива + """ """ +  КаталогВременныхФайлов() + """";
	Шелл=Новый COMОбъект("Wscript.Shell");
	Шелл.run(СтрокаКоманды,1,True);
	ИмяФайлаОтвета =  КаталогВременныхФайлов() + "postcalc_new";
А это полное решение другого программиста: 1c_postcalc_request.txt
Очень признателен авторам, которые поделились своими решениями для платформы 1С!

We use cookies to analyze website traffic and improve the performance of our site. By continuing to use this website, you agree to our Personal Data Processing Policy.