php curl 請求下載檔案,以及同時向介面傳送引數和檔案
阿新 • • 發佈:2019-02-10
最近在弄抓取資料,自然而然用到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 獲取即可