标题中的“Content-Type”不会更改

时间:2013-06-13 10:35:43

标签: php http-headers download rest

我正在尝试使用下一步执行的cURL调用Rest Web服务:

  1. 生成证书
  2. 下载此证书
  3. 这些功能中的每一个都是单独工作,但是当它们在一个服务中收集时,下载对话框没有打开,我总是将text / html作为内容类型,我通过Firebug看到它。

    这是下载的代码(来自php.ent):

     if (file_exists($filename)) {
                header("Content-Length: " . filesize($filename));
                header('Content-Type: application/octet-stream');
                header('Content-Disposition: attachment; filename=' . $certName);
    
                readfile($filename, false);
                exit();
            }
    

    以下是我如何调用我的服务:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    $dat=array( 
     // many args
                );
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $dat);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
        if ($curl_errno > 0) {
           echo "cURL Error ($curl_errno): $curl_error\n";
        } else {
           echo "Data received: $data\n";
       }
        curl_close($ch);
    

    有什么不对的家伙?

1 个答案:

答案 0 :(得分:1)

  1. 您的浏览器发出HTTP请求
  2. 您的服务器运行运行cURL的PHP​​脚本
  3. cURL从另一台服务器获取数据并忽略Content-Disposition标头,因为它是cURL而不是浏览器
  4. 运行cURL的PHP​​脚本输出Data received: $data作为HTML文档的正文
  5. 浏览器接收该HTTP文档
  6. 如果您希望cURL使用程序充当代理,那么您需要代理HTTP标头,而不是将额外数据添加到输出。