CURL-запрос с интранет-приложениями - PullRequest
0 голосов
/ 14 октября 2019

Обновление 2:

print_r(curl_error($ch));

OpenSSL SSL_connect: SSL_ERROR_SYSCALL в связи с 10.10.10.10:8339

Я работаю накорпоративная сеть с установленным WAMP. Я попытался подключиться к интернет-API с помощью Restlet Client, и я могу сделать запрос GET без каких-либо проблем.

Я попробовал вызовы API, используя запрос браузера, и он работает нормально.

Мне не удается выполнить эти вызовы API с помощью запроса PHP CURL на сервере WAMP на моем локальном компьютере.

Я попытался использовать прокси, включенный в CURL, но безуспешно. Я попытался включить ERROR_Reporting (E_ALL), но также не вижу никаких ошибок.

Вот мой код.

$url = "https://10.10.10.10:8339/beta/targets/1234234123/isolated/1567687263?samples=true";
$username="apiuser";
$password="apipassword";
//$proxy = 'proxy:8080';
//$proxyauth = 'proxyuser:proxypassword';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
print_r($output);
//print_r($info);
curl_close($ch);

Вывод для вышеупомянутого является пустым

enter image description here

1 Ответ

1 голос
/ 14 октября 2019

Проблема в том, что вы подключаетесь к HTTPS-серверу без указания имени хоста. Поэтому невозможно проверить имя хоста, которое является частью HTTPS.

Лучше всего было бы использовать имя хоста. И, если вы используете самозаверяющие сертификаты, установите их на своем сервере, чтобы их можно было проверить.

Вместо этого вы можете отключить эту проверку в cURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

Смотрите также: https://stackoverflow.com/a/15237205/362536

...