2014-02-12 8 views
0

Я хочу получить набор изображений, используя URL-адрес в PHP. Я пробовал использовать file_get_contents и curl. Ниже приведен код, который я пытался использовать.Сохранить изображение по URL-адресу

$image = file_get_contents('http://user:[email protected]/directory/images/image1.jpg'); 
file_put_contents('D:/images/image1.jpg', $image); 

и

$url = 'http://server/directory/images/image1.jpg'; 
$localFilePath = 'D:/images/image1.jpg'; 
$ch = curl_init ($url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); 
curl_setopt($ch, CURLOPT_USERPWD, "user:pwd"); 
$raw = curl_exec($ch); 
curl_close ($ch); 
if(file_exists($localFilePath)){ 
    unlink($localFilePath); 
} 
$fp = fopen($localFilePath,'wb'); 
fwrite($fp, $raw); 
fclose($fp); 

В обоих случаях я получаю следующее сообщение об ошибке:

401 - Unauthorized : Access is denied due to invalid credentials. 

пароль имеет особый характер. Я не могу изменить его на простой пароль, поскольку политики паролей не позволяют этого.

+0

При использовании 'file_get_contents()' вам нужно создать специальный контекст потока, содержащий заголовок Authentication. Код скручивания должен быть точным. Каков особый характер? – hek2mgl

+0

Является ли особым персонажем бегство? – DanFromGermany

+0

Специальный символ - символ подчеркивания. Не уверен, как избежать этого. –

ответ

0

Я не вижу места, где вы говорите CURL использовать Authentication:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

Я думаю, что это также может быть потому, что вы не используете куки, позволяют им:

curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); 
+0

Ну, я пробовал использовать CURLOPT_USERPWD. Но это не помогло. –

+0

добавил (а) это код: curl_setopt ($ ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt ($ ch, CURLOPT_USERPWD, 'пользователь: Pwd_123'); По-прежнему получает ту же ошибку. –

0

эквивалент этой линии

curl_setopt($ch, CURLOPT_USERPWD, "user:pwd"); 

Это один, и вы можете попробовать это, заменив ваш один

curl_setopt($ch, CURLOPT_HTTPHEADER, 
     array("Authorization: Basic ".base64_encode("user:pwd"))); 

// also you can try by changing +/characters into _- 

Теперь переходите к делу. Base64 имеет несколько реализаций, основанных на RFC. Например: RFC3538. Различные библиотеки или разные языки реализовали различные RFC для кодирования/декодирования base64. Например, при некоторой реализации он использует символы + и /, а некоторые используют символы _ и -.

Итак, скажем, ваш curl отправляет строку base64 для авторизации xyz+12=, но ваш сервер ожидает, что строка будет xyz_12=. Таким образом, он, очевидно, не сможет декодироваться.

Смежные вопросы