Intereting Posts
Групповой массив по значениям субарама Как я могу предотвратить инъекции SQL в расширение PHP oci? PHP Неустранимая ошибка: вызов функции-члена bind_param () php проверяет несколько дат в массиве в пределах диапазона дат Переменные продукты WooCommerce: сохраняйте только «минимальную» цену с помощью специальной метки Отправить значение div на форму отправить Обходной путь для ограничения 990 символов для почтовых серверов Вычисление корней с помощью bc_math или GMP Алгоритм создания большого файла фиктивных файлов Запуск PHP: невозможно загрузить динамическую библиотеку, Windows, Apache 2.2, php 5.2.11 Рекурсивно объединить подобные индексы PHP создает совершенно белую страницу, никаких ошибок, журналов или заголовков. Приложения для Symfony2 YML по каждому запросу Как мы можем создать довольно безопасный хэш пароля в PHP? массив ответов ajax json, использующий в php

Запрос Curl с дайджестом auth в PHP для скачивания Частный репозиторий Bitbucket

Я пытаюсь выполнить этот запрос на php, чтобы загрузить последний источник из моего личного хранилища Bitbucket:

curl --digest --user user:pass https://bitbucket.org/user/repo/get/tip.zip -o test.zip 

в командной строке это нормально, файл скачать идеально, но в php не работает, этот мой php-код:

 $out = fopen('test.zip', 'w+'); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); curl_setopt($ch, CURLOPT_USERPWD, 'user:pass'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_FILE, $out); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_NOBODY, false); curl_setopt($ch, CURLOPT_URL, 'https://bitbucket.org/user/repo/get/tip.zip'); curl_exec($ch); 

Это ответ, логин его недействителен и сервер перенаправляется на страницу входа:

 Error CURL: '' Error number: 0 Array ( [url] => https://bitbucket.org/account/signin/?next=/user/repo/get/tip.tar.gz [content_type] => text/html; charset=utf-8 [http_code] => 200 [header_size] => 1099 [request_size] => 194 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 1 [total_time] => 1.055465 [namelookup_time] => 1.5E-5 [connect_time] => 0.102969 [pretransfer_time] => 0.216164 [size_upload] => 0 [size_download] => 10049 [speed_download] => 9520 [speed_upload] => 0 [download_content_length] => 10049 [upload_content_length] => 0 [starttransfer_time] => 0.527512 [redirect_time] => 0.527519 [redirect_url] => ) 

Кто-нибудь знает, как я могу решить свою проблему? Большое спасибо!!!

Этот код работал отлично для меня:

 define('USERNAME','username'); define('PASSWORD','password'); function download($url, $destination) { try { $fp = fopen($destination, "w"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, USERNAME . ":" . PASSWORD); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $resp = curl_exec($ch); // validate CURL status if(curl_errno($ch)) throw new Exception(curl_error($ch), 500); // validate HTTP status code (user/password credential issues) $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($status_code != 200) throw new Exception("Response with Status Code [" . $status_code . "].", 500); } catch(Exception $ex) { if ($ch != null) curl_close($ch); if ($fp != null) fclose($fp); throw new Exception('Unable to properly download file from url=[' + $url + '] to path [' + $destination + '].', 500, $ex); } if ($ch != null) curl_close($ch); if ($fp != null) fclose($fp); } download('https://bitbucket.org/brunobraga/playground/get/tip.tar.gz', '/tmp/test.tar.gz'); 

Я дал ему обычную «20-минутную возиться», и я буду проклят, работая с CURL и моим клиентом OSX HTTP, это, похоже, не хочет сдвигаться с места, и я успешно работал с HTTP Digest и Curl в прошлом ,

Одно из предложений: если командная строка работает, то почему бы не использовать команду? Поддерживает ли ваш производственный сервер exec() ?

У меня была такая же проблема; удалил все буквы, отличные от буквенно-цифровых символов, из пароля, и это сработало! Не знаю, почему.

Я надеюсь, что это помогает.