Curl提交POST請求到一個網址 網址會返回一個檔案 如果輸出會輸出這個檔案的內容 如何擷取返回的檔案名稱 或者如何把這個檔案儲存呢
function liansuo_post($url,$data){ // 類比提交資料函數 $curl = curl_init(); // 啟動一個CURL會話 curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證認證來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從認證中檢查SSL密碼編譯演算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 類比使用者使用的瀏覽器 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉 curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動化佈建Referer curl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的資料包 curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['cookie_file']); // 讀取上面所儲存的Cookie資訊 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定逾時限制防止死迴圈 curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header地區內容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 擷取的資訊以檔案流的形式返回 $tmpInfo = curl_exec($curl); // 執行操作
// $rinfo=curl_getinfo($curl);
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);
}
curl_close($curl); // 關鍵CURL會話
// print_r($rinfo);
return $tmpInfo; // 返回資料
}
回複內容:
Curl提交POST請求到一個網址 網址會返回一個檔案 如果輸出會輸出這個檔案的內容 如何擷取返回的檔案名稱 或者如何把這個檔案儲存呢
function liansuo_post($url,$data){ // 類比提交資料函數 $curl = curl_init(); // 啟動一個CURL會話 curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證認證來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從認證中檢查SSL密碼編譯演算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 類比使用者使用的瀏覽器 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉 curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動化佈建Referer curl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的資料包 curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['cookie_file']); // 讀取上面所儲存的Cookie資訊 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定逾時限制防止死迴圈 curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header地區內容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 擷取的資訊以檔案流的形式返回 $tmpInfo = curl_exec($curl); // 執行操作
// $rinfo=curl_getinfo($curl);
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);
}
curl_close($curl); // 關鍵CURL會話
// print_r($rinfo);
return $tmpInfo; // 返回資料
}
發送curl 請求的時候加上
//擷取響應的訊息頭curl_setopt($curl, CURLOPT_HEADER, 1);curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
解析Http頭的Content-Disposition
擷取檔案名稱
$tmpInfo = curl_exec($curl);list($headers, $body) = explode("\r\n\r\n", $tmpInfo, 2);$header_array = explode("\n", $headers[0]);foreach($header_array as $header_value) { $header_pieces = explode(':', $header_value); if(count($header_pieces) == 2) { $headers[$header_pieces[0]] = trim($header_pieces[1]); }}$file_name = $headers['Content-Disposition'];$file_type = $headers['Content-Type'];$file_content = $body;
可以參考以上代碼,如果沒有Content-Disposition
,需要特殊處理下,可以看看對方返回的檔案名稱放在哪。
儲存檔案只需要把 $file_content
寫入開啟的檔案控制代碼
curl -O -d "key=val" url
這樣返回的內容就儲存為同名檔案了。
你到底是要返回的「檔案名稱」還是檔案內容?如果要檔案名稱的話,先檢查「Content-Disposition」頭,沒有就用 URL 上的檔案名稱。如果要檔案內容的話,自己寫一個 write 函數傳給 curl。