PHP - Как запустить HTTP-запрос на получение защищенного URL-адреса (HTTPS)?

Я пытаюсь запустить HTTP-запрос GET по защищенному URL-адресу, который запрашивает имя пользователя и пароль. Это нормально, когда я использую это из браузера, но я не уверен, как это сделать с помощью PHP.

Я пробовал использовать два метода:

1) Используя Curl, как предлагается здесь: Сделайте HTTPS-запрос через PHP и получить ответ

2) Использование file_get_contents, как предлагается здесь: Как отправить запрос GET из PHP?

Но первый мне не ответил. И второй выдал мне следующую ошибку:

failed to open stream: HTTP request failed

И это мой код для завитка:

$url="https://xxxxx.com";
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

и для file_get_contents:

$url="https://xxxx.com";
$response=file_get_contents($url);
echo $response;

URL-адрес вернет XML-ответ для тестируемого API. Может ли кто-нибудь указать мне правильное направление?

Спасибо!


person blackRider    schedule 08.10.2012    source источник
comment
Возможно, вы путаете ограничения доступа (например, базовую аутентификацию и сотрудничество) и https — вы уверены, что серверу требуется https? И если вам нужна базовая аутентификация, вы должны сказать curl, чтобы дать веб-серверу имя пользователя и пароль.   -  person fvu    schedule 09.10.2012


Ответы (1)


Если мы сосредоточимся на требовании отправить имя пользователя и пароль, потому что я подозреваю, что это ваша основная проблема, попробуйте это

$ch = curl_init();

$url="https://xxxxx.com";
// OR - check with your server's operator
$url="http://xxxxx.com";

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
// or maybe 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
// - see http://stackoverflow.com/questions/4753648/problems-with-username-or-pass-with-colon-when-setting-curlopt-userpwd
// check the cURL documentation

$output = curl_exec($ch);
$info = curl_getinfo($ch);
// don't forget to check the content of $info, even a print_r($info) is better 
// than nothing during debug
curl_close($ch);
person fvu    schedule 08.10.2012
comment
Спасибо за быстрый ответ фву. Я пробовал ваш код, но все равно не повезло с этим. А $info просто выводит текстовый массив. - person blackRider; 09.10.2012
comment
И да сервер требует https. иначе я получаю ошибку 404. - person blackRider; 09.10.2012
comment
@meraz ты уверен, что использовал print_r ? Потому что он должен либо показывать FALSE (при ошибке), либо полный набор переменных, которые помогут вам диагностировать передачу или проблемы. - person fvu; 09.10.2012
comment
ой извини мой плохой. Я использовал эхо вместо print_r. Итак, print_r выглядит так: ( [http_code] =› 0 [header_size] =› 0 [request_size] =› 0 [filetime] =› -1 [ssl_verify_result] =› 0 [redirect_count] =› 0 [total_time] =› 0.05831 [pretransfer_time] =› 0 [size_upload] =› 0 [size_download] =› 0 [speed_download] =› 0 [speed_upload] =› 0 [download_content_length] =› -1 [upload_content_length] =› -1 [starttransfer_time] =› 0 [redirect_time] =› 0 [certinfo] =› Array ( ) [redirect_url] =› ) - person blackRider; 09.10.2012