8.х WEB http сервисы

Тема в разделе ""1C:Web-Сервер"", создана пользователем TODD22, 30 июл 2015.

  1. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.568
    Симпатии:
    717
    Баллы:
    204
    %20 - это пробел всегда был. Не надо на него кавычки менять. Судя по скриншоту, на %20 меняются все пробелы
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Тод, я вижу чем отличаются запросы из браузера и из 1С.
    При запросе из 1С в куках оно зачем-то пытается NTLM авторизацию для прокси сервера произвести.
    В этом ли дело не знаю.
    Как помочь правда тоже.

    Вот бы твои друзья на той стороне расшифровали крякозябры эти. Что оно сказать то в ответ пытается.
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.568
    Симпатии:
    717
    Баллы:
    204
    Ответ от сервера возможно в ANSI кодировке, при чтении ответа из файла-ответа нужно поиграться с кодировкой.
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    нет, не ANSI это.
    --- Объединение сообщений, 30 июл 2015 ---
    Ха!
    <?xml version="1.0" encoding="utf-8"?><root><result>OK</result></root>
    --- Объединение сообщений, 30 июл 2015 ---
    я понял что оно возвращает.

    Вложения:

    • v8_C522_1e.zip
      Размер файла:
      304 байт
      Просмотров:
      1
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Тод, смотри, вот этот код почти рабочий. Строка до которой работает отмечена.
    Код:
        СоединениеHTTP = Новый HTTPСоединение(Сервер,Порт,,,,,);
      
        ХМЛВзаиморасчеты = ТЗВзаиморасчеты();
        АдресРесурса = "/main?";
      
        Заголовки = Новый Соответствие;
        Заголовки.Вставить("Accept-Encoding", "deflate");
                  
        HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса + "func=setbillingstatus&auth_login=login&auth_pass=test&xml=" + ХМЛВзаиморасчеты, Заголовки);
      
        Попытка
            ОтветHTTP = СоединениеHTTP.Получить(HTTPЗапрос);
        Исключение
            Сообщить(ОписаниеОшибки());
            Возврат;
        КонецПопытки;
      
        Результат = ОтветHTTP.ПолучитьТелоКакДвоичныеДанные();
        ИмяВременногоФайла = ПолучитьИмяВременногоФайла("zip");
        Результат.Записать(ИмяВременногоФайла);
      
        КаталогДляРаспаковки = КаталогВременныхФайлов();
        ИмяРазархивированногоФайла = "";
        Архиватор = Новый ЧтениеZipФайла(ИмяВременногоФайла); //<- До сюда работает. Ты можешь открыть этот файл каким нибудь архиватором и проверить что там ответ сервера.
        Если Архиватор.Элементы.Количество() > 0 Тогда
            Архиватор.Извлечь(Архиватор.Элементы[0], КаталогДляРаспаковки, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
            ИмяРазархивированногоФайла = КаталогДляРаспаковки + Архиватор.Элементы[0].Имя;
        Иначе
            ИмяРазархивированногоФайла = "";  
        КонецЕсли;
        Архиватор.Закрыть();
      
        Чтение = Новый ЧтениеТекста(ИмяРазархивированногоФайла);
        РезультатЗапроса = Чтение.Прочитать();
        Чтение.Закрыть();
    
    Говорю почти - потому что 1С встроенным объектом своим ЧтениеZip не может открыть данные, хотя если попытаться сделать это через проводник например, то все откроется, ответ сервера можно прочитать.
    Кароче те крякозябры это просто двоичные данные. Это по факту ответ сервера, но в архиве.
    Далее, сервер этот не реагирует на заголовок Accept-Encoding. Т.е. если даже я там ему указываю что клиент не поддерживает принятие сжатых данных - серверу пофиг. И по видимому несмотря на то что я deflate указываю, он возвращает данные в формате gzip, которые 1С-ка не может расшифровать. Браузеру то пофиг, он расшифрует, а 1С не могет.


    Кароче, ты пни парней на той стороне. Скажи чтобы что-нибудь придумали. Пусть ответ не сжатый отдают. (тогда в том куске кода можно выкинуть разархивирование).
    И вопрос по поводу $_POST и т.п. что я выше писал тоже не снимается. Это все-таки нонсенс файл через GET параметр передавать.
    TODD22 нравится это.
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.568
    Симпатии:
    717
    Баллы:
    204
    Мдя....включать принудительное сжатие - мощно.....
    В общем, оно работает и через ОтправитьДляОбработки()....
    TODD22 нравится это.
  7. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    В общем на той стороне посмотрели что приходит... и приходит вот что:

    "xml=<?xml version=\"1.0\"?><root><item inn=\"777777777\" balans=\"-5000\"/></root>

    Как это победить?
    Получается неэкранированное равно и парсер запинается....
  8. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Что то я не понял. У меня запрос get или post ? В чём разница?
  9. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Ну всё вроде победили... на их стороне был косяк с получением post запроса. А сам xml приходит и разбирается нормально.
  10. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.779
    Симпатии:
    509
    Баллы:
    204
    Ну вот, что и следовало доказать :)
    Так-то с веб-сервисами по-другому работать нужно. В 1С есть целый механизм. Но это так, лирика. Пытался я подключиться к одному веб-сервису из 1С - пришлось скрипт формировать, т.к. 1С не доработана в плане JSON.
  11. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Хотя если правильно рассудить то проблема то на моей стороне. Ведь посланный браузером этот запрос нормально разбирается.
    Надо всё же разобраться чего такого делает браузер....
  12. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.779
    Симпатии:
    509
    Баллы:
    204
    скорее всего с кодировкой балуется. Насколько знаю, сервера работают с UTF, возможно 1С грузит в ANSI.
  13. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Как мне на принимающей стороне говорят скорее всего парсер принимает строку <?xml version= за передачу параметра. То есть после знака равно думает что там параметр. И запинается на этом месте.
    Они на своей стороне подправили и теперь работает нормально. Но хотелось бы разобраться в причине. Это тут у меня свой сервис что хочу то и делаю. А могут быть и чужие.... сервисы где для меня никто править не будет.
  14. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Эм.
    Я вообще-то об этом еще вчера писал. :) Только это ошибка на принимающей стороне, и в 1С делать с этим ничего не надо.
    Тод, вообще-то то что они файл xml видят - это отлично, только я так и не понял насчет ответа сервера - ты то его видишь? Что со сжатием в возвращаемом сервером ответе?

    Тод, там не так что-то с сервисом. Чет он через попу сделан кажется.
    Если ты отправляешь POST запрос, то в теле запроса ты должен передать содержимое файла. Параметры у тебя должны уйти в строке запроса.
    Т.е. строка запроса у тебя будет
    main?func=setbillingstatus&auth_login=login&auth_pass=test
    а в теле ты передаешь
    <?xml version="1.0"?><root><item inn="777777777" balans="-5000"/></root>

    На принимающей стороне они из массива $_GET извлекают параметры func, auth_login, auth_pass, а из массива $_POST они извлекают содержимое файла. Все.
    А так как сейчас передается - это бред. Естественно парсер будет спотыкаться, если ты в строку параметров засовываешь содержимое текстового файла (xml твоего), потом передаешь ее (не важно пост или гет запросом). Это же текстовый файл - нельзя его просто взять и вытащить из строки параметров, там же будет ошибка парсера.
    Хотя там не php вроде на сервере.
  15. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.779
    Симпатии:
    509
    Баллы:
    204
    вот по-этому и нужно делать все через механизмы веб-сервисов в 1С :)
  16. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Да нет.
    Поэтому нужно делать документацию к своему сервису.

    Например так:
    upload_2015-7-31_10-13-10.png
    мы видим адрес ресурса куда нам слать запрос, мы видим метод отправки запроса, мы видим параметр, который надо передать в строке запроса и параметр который нам надо передать в теле запроса.

    upload_2015-7-31_10-13-23.png
    и видим из чего состоит структура которую выше просят в теле запроса.


    А то что у Тода сейчас, ну не знаю. Там вообще не пойми что и как.
  17. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.779
    Симпатии:
    509
    Баллы:
    204
    С документацией - согласен, проще работать, и предъявить есть кому :)
  18. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Тогда я вообще не понимаю как мне послать post запрос?
    Я добавляю параметр. И в него xml строку.

    Может сервис то и правильно работает. Может я не правильно делаю в 1С пост запрос?
  19. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код из #41. Его я не проверял вчера. Он реализует то как оно должно работать.
    Нихрена сервис правильно не работает если он пытается парсить xml файл из строки параметров.
  20. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Так может правильно. Может он пытается не парсить. А принимает строку как get запрос. И запинается на строке xml файла думая что это параметр get запроса.
    А я не правильно сформировал post запрос. Сервис может ждёт xml в теле post запроса... и получив распарсит правильно.
    Буду пробовать код из 41.
Похожие темы
  1. Irys
    Ответов:
    8
    Просмотров:
    5.154
  2. Науменко
    Ответов:
    1
    Просмотров:
    865
  3. Bonderos
    Ответов:
    2
    Просмотров:
    2.271
  4. Hatycik
    Ответов:
    33
    Просмотров:
    2.635
Загрузка...

Поделиться этой страницей