PHP Laravel, Apache Сервер: «Curl ErrNo: 0. Ошибка скручивания: не удалось подключиться к my.website.com:443; операция уже выполняется» - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть сервер apache с распределением centos, для которого я использовал проект PHP Laravel, используя git. Он использует запросы cURL для выборки и выполнения данных, полученных с конечных точек. Когда я запускаю это на моей локальной виртуальной машине, она работает отлично. Когда я запускаю его на своем

Вот мой код, обратите внимание на запросы cURL:

//NOTE: $this->headers = ["Authorization: Bearer " . myServerAccessToken];
 //sets URL and $curl
 public function getAdmins() {
   $adminsURL = "https://my.test.instructure.com/api/v1/accounts/1/admins?per_page=20";
   $curl = curl_init();

   self::requestCurl($curl, $adminsURL, $this->headers);
   $resp = curl_exec($curl);
   //dd($resp); //shows false
   return self::setHeaders($curl);
 }

  //cURL request function: used to set the value of $curl as seen in other functions
 public function requestCurl($curl, $url, $headers) {
     return curl_setopt_array($curl, [
       CURLOPT_RETURNTRANSFER => TRUE,
       CURLINFO_HEADER_OUT => TRUE,
       CURLOPT_URL => $url,
       CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
       CURLOPT_SSL_VERIFYPEER => TRUE,
       CURLOPT_HTTPHEADER => $headers,
       CURLOPT_CUSTOMREQUEST => 'GET',
       CURLOPT_FOLLOWLOCATION => TRUE,
       CURLOPT_MAXREDIRS => 10, 
       CURLOPT_HEADER => TRUE
     ]);
   }


//returns "curl errno: 0. Failed to connect to my.test.instructure.com:443; Operation now in progress
 //gets the data from a successful curl request, and returns said data
public function setHeaders($curl) {
  echo "<h1>SetHeaders()</h1>";
  $resp = curl_exec($curl);
  $header_size = curl_getinfo( $curl, CURLINFO_HEADER_SIZE );
  $header = substr( $resp, 0, $header_size );
  $body = substr( $resp, $header_size); //$header_size
  $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
  if (curl_getinfo($curl, CURLINFO_HTTP_CODE) != 200) {
    echo "<h3>Curl errno: " . curl_getinfo($curl, CURLINFO_HTTP_CODE) . "</h3>";
    echo "<h3>Curl error(): " . curl_error($curl) . "</h3>";
    dd($body);
    return null; 
  }
  $data = json_decode($body, true);
  return $data;
}

Я могу запустить этот код на своей локальной машине, и он отлично работает. Никаких нареканий, полный успех. Но когда я запускаю его на своем apache сервере с дистрибутивом centos, он разваливается. Вместо этого я получаю следующие выходные данные:

"SetHeaders ()"
"Curl errno: 0"
"Curl error (): Не удалось подключиться к my.test.instructure.com : 443; Операция в процессе "

" "[dd ($ body) возвращает пустую строку] *

====

Я посмотрел up currl errno: 0, и я посмотрел ошибку curl 443, но наиболее близкой к проблеме, схожей с моей, является эта страница:

Как устранить ошибку cURL (7): не удалось подключиться к хосту?

Но из того, что я могу сказать, у меня уже есть предложенное решение в моем коде (CURLOPT_FOLLOWLOCATION => TRUE).

Я подозреваю, что проблема с самим сервером, но я не знаю достаточно, чтобы сказать, что. Я посмотрел на папку / etc / hosts на моем сервере, но мне сказали, что она настроена правильно. Имея это в виду, что еще я могу попытаться решить эту проблему?

1 Ответ

0 голосов
/ 04 марта 2020

Проблема была в том, что в моей серверной сети был установлен прокси. Мне удалось обойти это, добавив две строки в мой запрос curl_setopt_array:

       public function requestCurl($curl, $url, $headers) {
           return curl_setopt_array($curl, [
             CURLOPT_RETURNTRANSFER => TRUE,
             CURLINFO_HEADER_OUT => TRUE,
             CURLOPT_URL => $url,
             CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
             CURLOPT_SSL_VERIFYPEER => TRUE,
             CURLOPT_HTTPHEADER => $headers,
             CURLOPT_CUSTOMREQUEST => 'GET',
             CURLOPT_PROXY => "https://my.proxy.url", //your proxy url
             CURLOPT_PROXYPORT => "my_proxy_port_number", // e.g 3333

             CURLOPT_FOLLOWLOCATION => TRUE,
             CURLOPT_MAXREDIRS => 10, 
             CURLOPT_HEADER => TRUE
           ]);
         }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...