1. 程式人生 > >php curl 請求下載檔案,以及同時向介面傳送引數和檔案

php curl 請求下載檔案,以及同時向介面傳送引數和檔案

最近在弄抓取資料,自然而然用到curl,結合其中遇到的一些問題,google了很久,加上自己嘗試,最後都解決了。

首先是php curl 從url 下載檔案

function getImage($url, $fileName)
    {
    	$ch = curl_init();
    	$fp = fopen($fileName, 'wb');
    	curl_setopt($ch, CURLOPT_URL, $url);
    	curl_setopt($ch, CURLOPT_FILE, $fp);
    	curl_setopt($ch, CURLOPT_HEADER, 0);
    	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    	curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    	curl_exec($ch);
    	curl_close($ch);
    	fclose($fp);
    }
    
$url 是一個圖片的實際地址,$filename 是你要下載到本地存 的檔名。然後是php curl向介面同時傳送 引數 和檔案
public function Post($url,$data){
    	$ch = curl_init();
    	curl_setopt($ch, CURLOPT_URL,$url);
    	curl_setopt($ch, CURLOPT_POST,1);
    	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    	$result=curl_exec ($ch);
    	curl_close ($ch);
    }

針對上面引數 $data 說明:如果要涉及到檔案傳送,data 值 類似:
array('file'=>'@'.'檔案的實體地址,就是存在你電腦上的地址');
//多圖的話就是
array('file1'=>'@'.'檔案的實體地址,就是存在你電腦上的地址','file2'=>'@'.'檔案地址','file3'=>'@'.'檔案地址' 以此類推);
//也可以
array('file[]'=>'@'.'檔案的實體地址,就是存在你電腦上的地址','file[]'=>'@'.'檔案地址','file[]'=>'@'.'檔案地址' 以此類推);

@ 的話curl post 請求 就會把這個當成檔案處理,所以設計到檔案上傳,必須加 @

上個函式的data 現在  就等於

data =array('file1'=>'@'.'檔案的實體地址,就是存在你電腦上的地址','file2'=>'@'.'檔案地址','file3'=>'@'.'檔案地址' 以此類推);

 如果要同時傳送 引數 和 檔案,那麼直接給$data 賦值即可:

如 

$data['user_id'] = 1;
$data['username'] = 'admin';
...

最後接受引數和檔案的地方直接 用 

$_POST 和 $_FILES 獲取即可