У меня проблема с HTTP-аутентификацией. Я не мог получить содержание этого URL-адреса, потому что ему нужно http-аутентификация.
Код:
<?php $url = "http://www.abcdefg.com/12345/"; $username = 'username'; $password = 'password'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); $out = curl_exec($ch); print "error:" . curl_error($ch) . "<br />"; print "output:" . $out . "<br /><br />"; curl_close($ch); ?>
Проблема заключается в следующем: вместо показа реального контента он показывает «302 Найдено, документ переместился сюда».
Я пробовал «http: // имя пользователя: пароль@www.abcdefg.com/12345/», не работает.
При обращении к этому URL-адресу (1) во всплывающем окне запрашиваются имя пользователя и пароль. но всплывающее окно – из другого URL-адреса (2) (сервер аутентификации sso). если пройти аутентификацию. то он снова возвращается к URL-адресу (1). в это время я могу получить доступ к содержимому этого URL-адреса (1).
Я использую firebug, чтобы получить следующее сообщение, обратившись к URL прямо из браузера:
Шаг 1
URL: GET http://www.abcdefg.com/12345/ Status: 302 Found Protocol: http
Шаг 2
URL: GET https://www.ssoauth.com/obrareq.cgi?wh=xxx wu=xxx wo=xxx rh=http://www.abcdefg.com ru=/12345/ Status: 302 Redirect Protocol: https
Шаг 3
URL: GET http://www.abcdefg.com/obrar.cgi?cookie=xxxxxxxxxxxxxxx Status: 302 Found Protocol: http
Шаг 4
URL: GET http://www.abcdefg.com/12345/ Status: 200 OK Protocol: http
Затем отобразите содержимое …
Это как-то связано с печеньем? Как я могу использовать php curl для чтения содержимого?
Вы должны установить:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
Это заставит cURL подчиняться 302 и создать дополнительный запрос.