Curl提交POST請求到一個網址 如何擷取返回的檔案名稱

來源:互聯網
上載者:User
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。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.