Вопрос:

Запрос php-curl возвращает отказано

php php-curl

22 просмотра

2 ответа

26 Репутация автора

В настоящее время я пытаюсь получить некоторые данные с помощью запроса скручивания по этой ссылке . Выполнение этого возвращает следующее:

«HTTP / 2 403 сервер: AkamaiGHost mime-версия: 1.0 тип контента: текст / html длина контента: 293 истекает: вс, 11 августа 2019 08:34:24 мск дата: вс, 11 августа 2019 08:34:24 время по Гринвичу

Доступ закрыт

У вас нет разрешения на доступ к " http://www.g2a.com/lucene/search/filter ?" на этом сервере.

Ссылка № 18.9d0c1502.1565512464.22e1446 "

Я знаю, что curl работает нормально, потому что он работает с другими запросами, но только этот отклоняется. Кроме того, открытие ссылки в браузере не отображает ошибку «Отказано в доступе», но фактически возвращает нужные мне данные.

Это запрос curl, скопированный из кода:

try{
    //  initiate curl (used to request data from other webpages)
    $ch = curl_init();
    // will return the response, if false it prints the response
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // set the url, eliminates headers from response
    curl_setopt($ch, CURLOPT_URL, $g2a);
    curl_setopt($ch, CURLOPT_HEADER, true); 
    // execute
    $result=curl_exec($ch);

    //if some error occurs
    if (!$result)
        throw new Exception(curl_error($ch), curl_errno($ch));

    // Closing
    curl_close($ch);
} catch(Exception $e) {
    trigger_error(sprintf('Curl failed with error #%d: %s', $e->getCode(), $e->getMessage()), E_USER_ERROR);
}
var_dump($result);
//converts json to associative array
$result=json_decode($result, true);

Есть идеи, в чем может быть проблема?

Автор: texdade Источник Размещён: 11.08.2019 08:48

Ответы (2)


0 плюса

24256 Репутация автора

Получите прямой доступ к URL-адресу HTTPS:

$g2a = "https://www.g2a.com/lucene/search/filter";

нет аутентификации

Автор: Martin Zeitler Размещён: 11.08.2019 08:57

0 плюса

2898 Репутация автора

Если вы хотите использовать SSL с CURL, вы должны удалить корневой сертификат по адресу : https://curl.haxx.se/docs/caextract.html

Просто скачайте cacert.pm со ссылкой в ​​верхней части содержимого ... и скажите, какой сертификат использовать при подключении к SSL. Это устанавливает подходящее соединение (фактически безопасное соединение, противоположное использованию ssl_verifyer, в false ...)

Я предпочитаю предположить, что сервер, к которому вы подключаетесь, вероятно, не установил допустимость входящих запросов (через нечто, называемое CORS (Access-Control-Allow-Origin)). Если вы хотите подключиться с этого www.yourdomain.comмомента, они должны будут установить, что www.yourdomain.comдействительно для входящих запросов.

Я протестировал другие домены, с которыми работает приведенный ниже код, поэтому вам придется поговорить с владельцами g2a.com, чтобы решить эту проблему ( это проблема с сервером, а не только проблема с кодом)

<?php
$g2a = 'https://www.g2a.com';

//Tell cURL where our certificate bundle is located.

//an absolute path to your downloaded pem-file:
$certificate = "C:\wamp\www\stackoverflow\cacert.pem"; 

try{
    //  initiate curl (used to request data from other webpages)
    $ch = curl_init();
    // will return the response, if false it prints the response
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CAINFO, $certificate);
    curl_setopt($ch, CURLOPT_CAPATH, $certificate);

    // set the url, eliminates headers from response
    curl_setopt($ch, CURLOPT_URL, ($g2a) );
    curl_setopt($ch, CURLOPT_HEADER, true); 
    // execute
    $result=curl_exec($ch);

    //if some error occurs
    if (!$result)
        throw new Exception(curl_error($ch), curl_errno($ch));

    // Closing
    curl_close($ch);
    } catch(Exception $e) {
        trigger_error(sprintf('Curl failed with error #%d: %s', $e->getCode(), $e- 
        >getMessage()), E_USER_ERROR);
}
var_dump($result);

//converts json to associative array
$result=json_decode($result, true);
Автор: bestprogrammerintheworld Размещён: 11.08.2019 09:56
Вопросы из категории :
32x32