是否可以在CURLOPT_HEADERFUNCTION或CURLOPT_WRITEFUNCTION回调中关闭curl处理程序? e.g。
curl_setopt_array($ch, array(
CURLOPT_HEADERFUNCTION => array($this, 'callbackWriteHeader'),
CURLOPT_WRITEFUNCTION => array($this, 'callbackWriteBody'),
...
protected function callbackWriteHeader($ch, $string) {
if (...<check headers here...) {
curl_close($ch);
}
用例:我不想下载大文件,并且想要避免额外的HEAD请求只是为了学习文件大小(因为我下载的99%的文件很小)。
答案 0 :(得分:1)
这种方法似乎有点粗略,行为可能未定义。我没有尝试过是否有效,但我个人会通过抛出异常来解决问题。这似乎是处理函数内问题并返回先前状态的更标准方法。
然后,cURL调用之外的异常处理程序可以处理关闭句柄本身。
答案 1 :(得分:1)
更好的方法是:
curl_setopt($ch, CURLOPT_NOBODY, true);
回答关于在标题回调中关闭cutl的问题:
返回实际写入的字节数或返回-1以向模块发送信号错误(它将导致它使用CURLE_WRITE_ERROR返回码中止传输)。