2010-04-30 47 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 ****/ 
?> 
相关问题