Клиентский скрипт на подключения к серверу через API

Тема в разделе "Мегафлуд", создана пользователем ALIEN900, 7 янв 2016.

Метки:
  1. ALIEN900

    ALIEN900 Писатель

    Регистр.:
    27 май 2012
    Сообщения:
    3
    Симпатии:
    0
    Добрый день. пытаюсь разобраться с api но не чего не получается.. ошибка 400 и все, где допускаю ошибку подскажите если знаете)
    Код:
    <?php
    // 1. инициализация
    $token = 'api_key=********';
    $branch_id = 'branch_id';
    $order_type = 'order_type';
    $brand = 'brand';
    $model = 'model';
    $serial = 'serial';
    $ch = curl_init();
    // 2. указываем параметры, включая url
    curl_setopt($ch, CURLOPT_URL, 'https://api.*******');
    //curl_setopt($ch,CURLOPT_HTTPAUTH, '********');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,'token=$token&branch_id=$branch_id&order_type=$order_type&brand=$brand&model=$model&serial=$serial');
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // 3. получаем HTML в качестве результата
    $output = curl_exec($ch);
    $info = curl_getinfo($ch);
    echo 'Took ' . $info['total_time'] . ' seconds for url ' . $info['url'];
    // 4. закрываем соединение
    curl_close($ch);
    ?>
    так же на самом сервере как утверждают имеется рабочий скрипт
    Код:
    curl -X POST https://api.****** \
         -d "api_key=*****"
    
    
    {
        "token": "*******",
        "success": true
    }
    только каким бы способом не подключал этот скрипт, не чего не происходит. если я правильно понимаю, у меня не совсем правильно составлен POST запрос. а подключение и авторизация проходит нормально
     
  2. ykpon

    ykpon

    Регистр.:
    8 дек 2012
    Сообщения:
    248
    Симпатии:
    143
    400 - Bad Request. Эту ошибку, скорее всего, отдает сам скрипт, так как ты что-то неверно формируешь.
    Ну и, разумеется, не зная, что и куда ты отправляешь, помочь будет сложно.
     
  3. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    527
    Симпатии:
    244
    может вместо показа ошибок интерпретатора 400 ошибка происходит. Попробуй что то с ошибкой прописать -какой результат будет? типа: <?php echo test;
     
  4. ALIEN900

    ALIEN900 Писатель

    Регистр.:
    27 май 2012
    Сообщения:
    3
    Симпатии:
    0
    пробовал ставить тест. на странице просто тест показался и все. создал новую страницу с новым кодом
    Код:
    <?php
        // данные для запроса
        $postData = array(
            'token' => '*******',
            'branch_id' => '2',
            'order_type' => '1',
            'custom_fields' =>  '{\"key\": \"value\"}'
        );
        function funct($token)
        {
         $token = func_num_args();
        "token: $*******";
    }
        define("DEBUG", true); 
              $db->Debug = DEBUG; 
        // получить контент для запроса
        function getContent($postData) {
            global $postData;
         // контент для отправки
        //    $content = '';
           
            // данные для отправки
            foreach($postData as $token => $val) { 
                $content .= '--' . $boundary . "\n"; 
                $content .= 'Content-Disposition: form-data; name="' . $token . '"' . "\n\n" . $val . "\n"; 
            }
           
            // файлы для отправки
            foreach($files as $token => $*****) { 
                $content .= '--' . $boundary . "\n"; 
                $content .= 'Content-Disposition: form-data; name="' . $token . '"; filename="' . basename($file) . '"' . "\n"; 
            //    $content .= 'Content-Type: ' . getMimeType($file) . "\n"; 
                $content .= 'Content-Transfer-Encoding: binary' . "\n\n"; 
                $content .= file_get_contents($file) . "\n"; 
            }
           
            // завершаем контент
            $content .= "--$boundary--\n";
           
            return array($boundary, $content);
        }
       
        // создаем подключение
        $ch = curl_init('**********');
        // устанавлваем даные для отправки
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        // флаг о том, что нужно получить результат
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch,CURLOPT_HTTPAUTH, '*****');
        // отправляем запрос
        $response = curl_exec($ch);
        // закрываем соединение
        curl_close($ch);
       
        var_export($response);
    ?>
    
    теперь получил
    Ошибка доступа (403)
    Ошибка проверки CSRF. Запрос отклонён.

    Вы видите это сообщение, потому что данный сайт использует защищённое соединение и требует, чтобы заголовок 'Referer' был передан вашим браузером, но он не был им передан. Данный заголовок необходим по соображениям безопасности, чтобы убедиться, что ваш браузер не был взломан, а запрос к серверу не был перехвачен или подменён.

    Если вы настроили свой браузер таким образом, чтобы запретить ему передавать заголовок 'Referer', пожалуйста, разрешите ему отсылать данный заголовок по крайней мере для данного сайта, или для всех HTTPS-соединений, или для запросов, домен и порт назначения совпадают с доменом и портом текущей страницы.

    В отладочном режиме доступно больше информации. Включить отладочный режим можно, установив значение переменной DEBUG=True.

    вроде и написал
    define("DEBUG", true);
    $db->Debug = DEBUG;
    вот только так ничего не произошло... где косячу может знаете? или это долгая история разбираться??
     
  5. ykpon

    ykpon

    Регистр.:
    8 дек 2012
    Сообщения:
    248
    Симпатии:
    143
     
  6. ALIEN900

    ALIEN900 Писатель

    Регистр.:
    27 май 2012
    Сообщения:
    3
    Симпатии:
    0
    так сам понимаю что где-то в этих двух страницах косячу. не пойму как правильно расставить. что бы теперь ушел токен(ключ авторизации) пока глухо "как в танке"
     
  7. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    527
    Симпатии:
    244
    передай в заголовке реферер, (какой именно хз, но попробуй адрес сервера, который API предоставляет). Почитай curlopt_headers и пример referer.
     
  8. ykpon

    ykpon

    Регистр.:
    8 дек 2012
    Сообщения:
    248
    Симпатии:
    143
    Лучше найди в интернете список рефереров свежий, загони его в массив и рандомный реферер используй в запросе.
     
  9. ALIEN900

    ALIEN900 Писатель

    Регистр.:
    27 май 2012
    Сообщения:
    3
    Симпатии:
    0
    спасибо что откликнулись. в общем проблема была в строчке
    $ch = curl_init('**********');
    поставил значение curl_setopt($ch, CURLOPT_URL, 'https://api.****') ссылка ругается на сертификат безопасности. прописываю вручную https:// открывается с ошибкой "Ошибка. Запрашиваемая вами страница недоступна"
     
  10. ALIEN900

    ALIEN900 Писатель

    Регистр.:
    27 май 2012
    Сообщения:
    3
    Симпатии:
    0
    может ли быть проблема в хостинге?