Home > Backend Development > PHP Tutorial > Curl提交POST请求到一个网址 如何获取返回的文件名

Curl提交POST请求到一个网址 如何获取返回的文件名

WBOY
Release: 2016-06-06 20:42:20
Original
1188 people have browsed it

Curl提交POST请求到一个网址 网址会返回一个文件 如果输出会输出这个文件的内容 如何获取返回的文件名 或者如何把这个文件保存呢

<code>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); // 执行操作    
</code>
Copy after login
Copy after login

// $rinfo=curl_getinfo($curl);
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);
}
curl_close($curl); // 关键CURL会话
// print_r($rinfo);
return $tmpInfo; // 返回数据
}

回复内容:

Curl提交POST请求到一个网址 网址会返回一个文件 如果输出会输出这个文件的内容 如何获取返回的文件名 或者如何把这个文件保存呢

<code>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); // 执行操作    
</code>
Copy after login
Copy after login

// $rinfo=curl_getinfo($curl);
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);
}
curl_close($curl); // 关键CURL会话
// print_r($rinfo);
return $tmpInfo; // 返回数据
}

发送curl 请求的时候加上

<code>//获取响应的消息头
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
</code>
Copy after login

解析Http头的Content-Disposition获取文件名

<code>$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;
</code>
Copy after login

可以参考以上代码,如果没有Content-Disposition,需要特殊处理下,可以看看对方返回的文件名放在哪。
保存文件只需要把 $file_content 写入打开的文件句柄

curl -O -d "key=val" url 这样返回的内容就保存为同名文件了。

你到底是要返回的「文件名」还是文件内容?如果要文件名的话,先检查「Content-Disposition」头,没有就用 URL 上的文件名。如果要文件内容的话,自己写一个 write 函数传给 curl。

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template