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

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

WBOY
Freigeben: 2016-06-06 20:42:20
Original
1188 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

// $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>
Nach dem Login kopieren
Nach dem Login kopieren

// $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>
Nach dem Login kopieren

解析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>
Nach dem Login kopieren

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

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

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

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage