-1

我使用 curl 下载了一个 json 文件,并且这个脚本工作正常。但是我需要 CURLOPT_HEADER 的标头将其保存到单独的文件中或添加到输出数组而不是同一个文件中,这可能吗?现在一切都保存到这个文件中,我需要将文件头与文件分开,这是一个不必要的过程。

    /** 
 * Send a GET requst
 * @param string $get 
 * @return string 
 */ 
public function curl_get(array $get = NULL) 
{  

    $url = $get['host'] .'/'. $get['service'];
    $filename = PLUGIN_BASE . 'logs/'. $get['service'] .'_'. $this->nice_filename();
    $fp = fopen($filename, 'w');

    unset($get['host']);
    unset($get['service']);

    $defaults = array( 
        CURLOPT_URL => $url. (strpos($url, '?') === FALSE ? '?' : ''). http_build_query($get), 
        CURLOPT_HEADER => 1, 
        CURLOPT_RETURNTRANSFER => TRUE, 
        CURLOPT_TIMEOUT => 30,
        CURLOPT_FILE => $fp
    ); 

    $ch = curl_init(); 
    curl_setopt_array($ch, ($defaults)); 
    if( ! $result = curl_exec($ch)) 
    { 
        //$result = curl_error($ch); 
        $filename = trigger_error(curl_error($ch)); 
    } 

    curl_close($ch); 
    fclose($fp);

    $arg = array(
        'file'=>$filename,
        'curl_id'=>$fp
    );

    return $arg;
}   

谢谢

4

2 回答 2

3

您可以使用CURLOPT_HEADERFUNCTION为每个收到的标头指定一个调用的函数:

function readHeader($ch, $header)
{
    // do something with the value of `$header`

    // you must return the length of the header that you received
    return strlen($header);
}
于 2012-10-24T02:08:17.720 回答
0

标头与数据用仅包含 \r\n 的行分开,因此您可以使用explode 来获取数据。从 curl 选项中取出 CURLOPT_FILE,将返回的字符串分解为单独的部分,然后自己将其保存到文件中。

list($header , $data) = explode("\r\n\r\n" , $result , 2);

或者您可以使用打开另一个文件并使用 CURLOPT_WRITEHEADER 选项将标题写入单独的文件

于 2012-10-23T08:11:52.240 回答