PHP Laravel, Apache Server: "Curl ErrNo: 0. Curl Error: Failed to connect to my.website.com:443; Operation Now In Progress"
PHP Laravel, Apache Server: "Curl ErrNo: 0. Curl Error: Failed to connect to my.website.com:443; Operation Now In Progress"
我有一个带有 centos 发行版的 apache 服务器,我已经将 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;
}
我可以 运行 在我的本地机器上运行这段代码,而且它运行良好。无怨无悔,圆满成功。但是当我 运行 它在我的带有 centos 发行版的 apache 服务器上时,它崩溃了。这个输出是我得到的:
"SetHeaders()"
"Curl errno: 0"
"Curl error(): Failed connect to my.test.instructure.com:443; Operation now in progress"
"" [dd($body) returns an empty string]
====
我查过 currl errno: 0 和 curl error 443,但是
我见过的与我的问题最接近的是这个页面:
How to resolve cURL Error (7): couldn't connect to host?
但据我所知,我的代码中已经有了建议的解决方案 (CURLOPT_FOLLOWLOCATION => TRUE)。
我怀疑问题出在服务器本身,但我对它的了解还不够多,无法说明什么。我查看了我服务器上的 /etc/hosts 文件夹,但我被告知它配置正确。考虑到这一点,我还能尝试什么来解决这个问题?
问题是我的服务器网络设置了代理。我可以通过在我的 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
]);
}
我有一个带有 centos 发行版的 apache 服务器,我已经将 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;
}
我可以 运行 在我的本地机器上运行这段代码,而且它运行良好。无怨无悔,圆满成功。但是当我 运行 它在我的带有 centos 发行版的 apache 服务器上时,它崩溃了。这个输出是我得到的:
"SetHeaders()"
"Curl errno: 0"
"Curl error(): Failed connect to my.test.instructure.com:443; Operation now in progress""" [dd($body) returns an empty string]
====
我查过 currl errno: 0 和 curl error 443,但是 我见过的与我的问题最接近的是这个页面:
How to resolve cURL Error (7): couldn't connect to host?
但据我所知,我的代码中已经有了建议的解决方案 (CURLOPT_FOLLOWLOCATION => TRUE)。
我怀疑问题出在服务器本身,但我对它的了解还不够多,无法说明什么。我查看了我服务器上的 /etc/hosts 文件夹,但我被告知它配置正确。考虑到这一点,我还能尝试什么来解决这个问题?
问题是我的服务器网络设置了代理。我可以通过在我的 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
]);
}