2014-02-12 2 views
0

PHP에서 URL을 사용하여 일련의 이미지를 가져오고 싶습니다. 나는 file_get_contentscurl을 사용해 보았습니다. 아래는 사용하려고 시도한 코드입니다.URL에서 이미지 저장

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

암호는 특수 문자가 있습니다

$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); 

, 나는 다음과 같은 오류를 얻고있다. 암호 정책이 허용하지 않는 일반 암호로 변경할 수는 없습니다.

+0

'file_get_contents()'를 사용하는 경우 인증 헤더를 포함하는 특수 스트림 컨텍스트를 만들어야합니다. 곱슬 곱슬 함이 좋을 것입니다. 특수 문자가 무엇입니까? – hek2mgl

+0

특수 문자가 이스케이프됩니까? – DanFromGermany

+0

특수 문자는 밑줄입니다. 확실하지 않은, 어떻게 그것을 탈출. –

답변

0

당신이 인증 사용 CURL에게 장소 표시되지 않는 : 당신이 쿠키를 사용하지 않는 때문에도있을 것 같아요

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, 'user : 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. 다른 라이브러리 또는 다른 언어가 base64 인코딩/디코딩을 위해 다른 RFC를 구현했습니다. 예를 들어, 일부 구현에서는 +/ 문자를 사용하고 일부는 _- 문자를 사용합니다.

그래서 말풍선이 xyz+12= 인 base64 문자열을 보내고 있지만 서버가 문자열이 xyz_12= 일 것으로 예상한다고 가정 해 보겠습니다. 따라서 해독에 실패 할 것입니다.