Имя: Пароль:
1C
1С v8
Разные запросы POST на 1С и PHP
,
0 D_E_S_131
 
18.11.17
20:40
Есть код на PHP


// our curl handle (initialize if required)
    static $ch = null;
    if (is_null($ch)) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; PHP client; ' . php_uname('s') . '; PHP/' . phpversion() . ')');
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    // run the query
    $res = curl_exec($ch);
    if ($res === false) throw new Exception('Could not get reply: ' . curl_error($ch));


...и делаю аналог на 1С


ssl = Новый ЗащищенноеСоединениеOpenSSL();

Соединение = Новый HTTPСоединение(ПутьКСайту,,,,,, ssl);

Запрос = Новый HTTPЗапрос(ЗапросКСайту, Заголовки);

Результат = Соединение.ОтправитьДляОбработки(Запрос);

СтрокаОтвет = Результат.ПолучитьТелоКакСтроку();


Код PHP отрабатывает корректно и возвращает в ответ строку JSON с нужными данными. Код на 1С возвращает в ответ строку с описанием ошибки. Все переменные (путь к сайту, текст запроса, заголовки) идентичные. Сам запрос отрабатывает без ошибок. Но такое ощущение, что заголовки приходят какие-то искаженные. Никто не сталкивался с подобным (уже всю голову сломал).
1 Asmody
 
18.11.17
20:45
(0) на php у тебя запрос GET, на 1С – POST
2 D_E_S_131
 
18.11.17
21:01
Где это по коду PHP видно?
В описании API сайта этот указано, что тип запроса должен быть POST. Но и замена кода на:


Результат = Соединение.Получить(Запрос);


...приводит к такому же результату. :(
3 D_E_S_131
 
18.11.17
21:07
При чем в API этого ресурса часть запросов может использоваться как публичные, а часть требуют аутентификацию.
Так вот публичные работают норм, а именно для аутентификации требуется передать параметры в заголовках и вот с ними какая-то проблема.
4 Fram
 
18.11.17
21:16
Ты нам важное то не показал. Где код формирования заголовка на 1с?
5 D_E_S_131
 
18.11.17
21:20
В PHP так


$headers = array(
        'Sign: ' . $sign,
        'Key: ' . $key,
    );


в 1С делаю так:


Заголовки = Новый Соответствие;
        
        Заголовки.Вставить("Sign", ШифрованноеЗначение);
        Заголовки.Вставить("Key", Ключ);


И там, и там передаются строковые переменные, которые одинаковы (даже специально через print() их из PHP выводил и принудительно подставлял в код 1С).
6 spock
 
18.11.17
21:27
(0) Вот по этому адресу глянь свои заголовки и ищи отличия:
http://httpbin.org/headers
7 RitterBruder
 
18.11.17
21:29
Какая платформа?
8 RitterBruder
 
18.11.17
21:29
Ну и всегда есть WinHttpRequest
9 D_E_S_131
 
18.11.17
21:30
(6) Ок, посмотрю.
(7) 8.3.10.2667
10 D_E_S_131
 
18.11.17
21:33
(6) Упссс... а как посмотерть там, просто адрес моего сайта подменить на указанный тобой?

(8) Имеешь ввиду не использовать платформу 1С для отправки запросов, а использовать виндовые методы?
11 RitterBruder
 
18.11.17
21:39
(10) Я так понял просто гет шлешь с 1С и PHP и сравниваешь результат.
Про виндовые методы - да, у меня у самого много что так работает, когда 1С мозг делает.
12 D_E_S_131
 
18.11.17
21:40
(11) А сравнить результат как? Сайт что-то вернет в ответ или как?
13 RitterBruder
 
18.11.17
21:48
(12) сайт отправляет в ответ полученные заголовки
14 Asmody
 
18.11.17
22:28
хотя, нет. установка CURLOPT_POSTFIELDS атоматом ставит метод POST.
15 Asmody
 
18.11.17
22:34
ставь fiddler и сравнивай
16 d4rkmesa
 
18.11.17
22:57
(12) Софта полно для мониторинга. Тот же membrane monitor, к примеру.
17 D_E_S_131
 
18.11.17
23:52
Спасибо, ребят, попробую.
18 oleg_km
 
19.11.17
00:09
(15) А робота нельзя сделать в сайте? Упомянули HTTP - миста сразу: фиддлера установи.
19 Fram
 
19.11.17
00:33
(5) вот это где в 1С

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; PHP client; ' . php_uname('s') . '; PHP/' . phpversion() . ')');
20 Сергиус
 
19.11.17
00:49
ШифрованноеЗначение - ты уверен что там правильное значение? Как ты его получаешь?
21 D_E_S_131
 
19.11.17
12:36
(19) Да знать бы что это вообще такое (код на PHP не я делал, это рабочий пример с githab-а)?

(20) Да, уверен. Я даже из PHP значение подставлял.
22 D_E_S_131
 
20.11.17
14:13
В итоге заработало с помощью WinHttpRequest. Видимо далека 1С еще до web-технологий...
23 Alligator219
 
20.11.17
14:16
(22) Скорее просто ты далек.
27 Fram
 
22.11.17
06:11
(21) в 1с эта фраза должна идти как заголовок
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн