2010-04-30 48 views
1

我需要使用php代碼下載文本文件。該文件正在進行http認證。我應該爲此使用什麼程序。我應該使用fsocketopen還是捲曲還是有其他方法可以做到這一點嗎?使用php下載文件通過傳遞用戶名和密碼進行http認證,從給定的URL

我正在使用fsocketopen,但它似乎沒有工作。

$fp=fsockopen("www.example.com",80,$errno,$errorstr); 

$out = "GET abcdata/feed.txt HTTP/1.1\r\n"; 

$out .= "User: xyz \r\n"; 

$out .= "Password: xyz \r\n\r\n"; 
fwrite($fp, $out); 

while(!feof($fp)) 
{ 

echo fgets($fp,1024); 

} 

fclose($fp); 

這裏fgets返回false。

任何幫助!

回答

4

最簡單的方法可能是使用http://username:[email protected]/path/file與fopen(如果URL包裝啓用),但如果你不喜歡,我會使用捲曲。沒測試過,但它可能應該是這樣的:

$out = fopen($localfilename, 'wb'); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FILE, $out); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_USERPWD, "username:password"); 
curl_exec($ch); 
curl_close($ch); 
fclose($out); 

$ localfilename應包含要寫入,用戶名本地文件名:密碼已與用於基本身份驗證的實際用戶名和密碼來代替,分離由一列(:)。

2

下面是使用捲曲方法與HTTP驗證下載文件的最簡單方法

<?php 
/*** DOWNLOAD FILE FROM CURL ****/ 

//API KEY AND PASSWORD 
$username='user'; 
$password='pass'; 
$usernamePassword = $username . ':' . $password; 
$headers = array('Authorization: Basic ' . base64_encode($usernamePassword), 'Content-Type: application/json'); 

//URL 
$url= 'https://yoururl.com'; 

//FILE NAME 
$filename = 'my_file.pdf'; 

//DOWNLOAD PATH 
$path = 'downloads/'.$filename; 

//FOLDER PATH 
$fp = fopen($path, 'w'); 

//SETTING UP CURL REQUEST 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
$data = curl_exec($ch); 

//CONNECTION CLOSE 
curl_close($ch); 
fclose($fp); 


//DOWNLOAD PDF LINK 
echo '<div id="download-pdf"> <a href="'.$path.'" download>DOWNLOAD AS PDF</a></div>'; 

/*** DOWNLOAD FILE FROM CURL ****/ 
?> 
相關問題