Исходящий вызов PHP-cURL работает на локальном хосте, но не на веб-сайте AWS, несмотря на то, что разрешает весь трафик - PullRequest
0 голосов
/ 11 июня 2019

Я использую curl на моем WordPress-сайте (размещенном на aws linux), чтобы получить информацию от нескольких API. Проблема: я получаю тайм-аут подключения только от одного API. Я также связался с провайдером API, и они сказали, что API работает нормально. Тот же код работал нормально 5 дней назад.

Теперь, пройдя стек и выполнив несколько вариаций, мы получим следующие результаты: 1) Тот же код работает в localhost. 2) Это также работает в почтальоне. 3) Код был скопирован с Почтальона на сайт, но время ожидания истекло. 4) Я отредактировал aws vpn nacl, чтобы разрешить весь трафик как входящего, так и исходящего в дополнение к тем, которые рекомендованы aws, все еще получая тайм-аут.

Это базовая функция, которую я использую, скопировал с почтальона и затем изменил:

function my2get_curl($myurl){
    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_URL => $myurl,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_USERAGENT =>$user_agent,
        CURLOPT_HTTPHEADER => array(

                "cache-control: no-cache",
        ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);
    $info = curl_getinfo($curl);
    curl_close($curl);

    if ($err) {
      echo "  cURL Error #:" . $err;
      echo json_encode($info,JSON_PRETTY_PRINT);

      die('');
    } else {
      return $response;
    }
}

Вот ошибка результата / скручивания (то же самое для http, за исключением того, что номер порта изменяется на 80):

    Failed to connect to www.travelpayouts.com port 443: Connection timed out

curl_info:

    { "url": "https:\/\/www.travelpayouts.com\/whereami?locale=en&callback=useriata&ip=<my.ip.address>", "content_type": null, "http_code": 0, "header_size": 0, "request_size": 0, "filetime": -1, "ssl_verify_result": 0, "redirect_count": 0, "total_time": 21.03931, "namelookup_time": 0.066799, "connect_time": 0, "pretransfer_time": 0, "size_upload": 0, "size_download": 0, "speed_download": 0, "speed_upload": 0, "download_content_length": -1, "upload_content_length": -1, "starttransfer_time": 0, "redirect_time": 0, "redirect_url": "", "primary_ip": "", "certinfo": [], "primary_port": 0, "local_ip": "", "local_port": 0 }

Что-то не так с кодом или (более вероятно) настройками aws? Как именно я могу выяснить причину проблемы и исправить ее?

1 Ответ

2 голосов
/ 11 июня 2019

Вы получаете эту проблему, потому что Amazon IPs закрыты для доступа к нашему API.Вы можете отправить свои статические IP-адреса в Amazon, и мы добавим их.

...