Здравствуйте! Прошу помощи вот в каком вопросе. Есть сервис, которые предоставляет доступ к данным через XML. Дело в том, что доступ к этим данным он предоставляет, цитирую: Логин и пароль у меня есть. Данные я пытаюсь получить, используя simplexml_load_file. И вот хоть убей не понимаю как можно произвести эту аутентификацию удаленно. Пытался и в адресе просто передать логин и пароль, но не вышло. Поиск по интернету дает советы по тому как ее реализовать у себя, но как подключиться удаленно я не могу понять. UPD Попробовал еще таким образом: PHP: simplexml_load_file("https://login:pwd@site.ru"); Но тоже не получается. Я что-то упускаю важное, но не пойму что, т/к в первый раз с таким сталкиваюсь.
@artoodetoo, попробовал через: PHP: file_get_contents("https://login:pwd@site.ru"); Если я правильно понял, что это тоже должно работать из всех перечисленных способов (к сожалению с английский не очень). Но он тоже не работает.
Попробовал таким способом: PHP: $opts = array( 'https'=>array( 'method'=>"GET", 'header' => "Authorization: Basic " . base64_encode("$username:$password") ) ); $context = stream_context_create($opts); // Open the file using the HTTP headers set above $file = file_get_contents($remote_url, false, $context); print($file); Пишут: failed to open stream, как и до этого. Есть ли разница в подключении к http и https таким способом?
Разница есть конечно. ПХП может не иметь транспорта для ХТТПС. А ещё есть такая штука, как SSL Context. А может быть недоступен и http (ищи allow_url_fopen). Разложи задачу на составляющие и проверяй отдельно каждый нюанс.
@artoodetoo, не очень понял сообщение. Это значит что мне надо пробовать иной способ подключения или другие параметры для stream_context_create? Что значит не иметь транспорта? Разве нет просто функции подключения, вводишь нужные параметры и все? P.S. Я извиняюсь, просто эта тема для меня новая
Это ты извини, я выработал весь запас доброты на сегодня. оффициальная документация и стековерфлоу = 90% успеха. гугль поможет
@denis01, попробовал таким образом: PHP: $headers = array( 'Content-Type: application/xml', "Authorization: Basic ".base64_encode("$username:$password") ); $process = curl_init($urlCountries); curl_setopt($process, CURLOPT_HTTPHEADER, $headers); curl_setopt($process, CURLOPT_HEADER, 1); curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password); curl_setopt($process, CURLOPT_TIMEOUT, 30); curl_setopt($process, CURLOPT_POST, 1); curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); $return = curl_exec($process); curl_close($process); print_r($return); Все также долго грузится, ошибок не пишет, но и ничего не выводит.
PHP: curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ; curl_setopt($curl, CURLOPT_USERPWD, "username:password");
@mahmuzar, добавил эту строчку: PHP: curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ); вторая с паролем у меня была уже, но все тоже самое. Вообще не понимаю что происходит, такое ощущение, что ошибка на уровне запятую забыл поставить, простая, но не понятно где и что.
@vlasenkov, какой ответ дает сервер? --- Добавлено --- Установи плагин для браузера. У меня файрфокс я использую такой. Через него добейся ответа и правильных заголовков.
@mahmuzar, понимаю что сейчас полетят тапки, но не знаю как это посмотреть, попробовал так: PHP: $headers = array( 'Content-Type: application/xml', "Authorization: Basic ".base64_encode("$username:$password") ); $process = curl_init($urlCountries); curl_setopt($process, CURLOPT_HTTPHEADER, $headers); curl_setopt($process, CURLOPT_HEADER, 1); curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ); curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password); curl_setopt($process, CURLOPT_TIMEOUT, 30); curl_setopt($process, CURLOPT_POST, 1); curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($process, CURLOPT_SSLVERSION, 3); curl_setopt($process, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($process, CURLOPT_FAILONERROR, 0); $return = curl_exec($process); $error = curl_error($process); $info = curl_getinfo($process, CURLINFO_HTTP_CODE); curl_close($process); echo $return.'<br>'.$error.'<br>'.$info; Добавил вот эти строки: PHP: curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($process, CURLOPT_SSLVERSION, 3); curl_setopt($process, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($process, CURLOPT_FAILONERROR, 0); $return = curl_exec($process); $error = curl_error($process); $info = curl_getinfo($process, CURLINFO_HTTP_CODE); и вывод error и info получил следующее: error = Connection timed out after 30001 milliseconds info = 0
Спасибо всем за помощь, я смог это сделать. PHP: $user = 'username'; $pass = 'password'; $url = 'url'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_USERPWD,"$user:$pass"); curl_setopt($ch, CURLOPT_HTTPGET, 1); $exec = curl_exec($ch); curl_close($ch); Скорее всего проблем была в том, что у хостера были закрыты некоторые порты, которые были необходимы. На будущее стоит уточнять этот момент.