【问题标题】:Curl get header with get not head request卷曲获取标头与获取非标头请求
【发布时间】:2015-10-29 08:12:24
【问题描述】:

好吧,我做了一个脚本检查文件是否存在,但是我从 Curl 得到的标头是错误的

  $curl = curl_init( $url );
  curl_setopt( $curl, CURLOPT_NOBODY, true );
  curl_setopt( $curl, CURLOPT_HEADER, true );
  curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
  curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );
  curl_setopt( $curl, CURLOPT_FRESH_CONNECT, true);
  $data = curl_exec( $curl );
  var_dump($data);

当@file_headers() 让我得到布尔值 false 时,它​​得到我的响应 200,这是正确的文件无法下载(对等方重置连接)

我会使用 file_headers 但它比 curl 慢得多(检查大约 10k 个文件)

知道如何修复 curl 以强制它在文件存在时正确显示吗?

仅供参考 curl_getinfo($curl, CURLINFO_HTTP_CODE); 也显示 200 个

*我的意思是如果文件被对等方重置,因为 cURL 检测文件是否完美存在(发出 Head 请求)而 get_headers() 默认使用 get 请求,有没有办法强制 cURL 发出 get 请求?

添加 curl_setopt($curl, CURLOPT_HTTPGET,true); 后 当我记录 curl 时,我看到:* 来自服务器的空回复,同时获取“由对等方重置”文件,但这是下载我的整个文件

好的,我认为我已经解决了添加 curl_setopt($curl, CURLOPT_RANGE, "1-1");并下载 1 个字节而不是获取标头,如果为 false,则文件不存在或被对等方重置

【问题讨论】:

    标签: php file curl header file-exists


    【解决方案1】:

    在de http状态之后重置发生,所以是的,200状态是可能的。

    错误似乎是禁止或缓慢处理下载。

    这样做:

    • 在你的 curl 请求中指定一个用户代理
    • 设置请求之间的(随机)等待时间

    请参阅以下示例:PHP cURL how to add the User Agent value OR overcome the Servers blocking cURL requests?

    【讨论】:

    • 不,我只是简化了这里的代码,我添加了用户代理,对等的重置是这个文件的正确答案,我只想通过 cURL 捕捉这种错误,我只测试一个文件使用 curl 我得到:HTTP/1.1 200 OK 服务器:nginx 日期:2015 年 8 月 6 日,星期四 09:25:05 GMT :05:19 GMT 连接:关闭,我会发现错误而不是 200
    • 就像我说的,连接重置对http状态没有影响。其次,http状态200并不能保证文件存在;-)
    • 那么如果文件存在,如何通过 curl 正确检查它(即使在连接被对等方重置的情况下)? file_headers() 答案对我有好处,我可以轻松捕捉到这个错误,但速度很慢,cURLing 对我来说快 20-30%。现在我意识到我的主要问题应该有所不同:)
    • 再等等我的话是错误的,cURL实际上可以正确检测文件是否存在但没有检测到连接是否被对等方重置,如何检测这个错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2011-09-14
    • 2020-10-15
    • 2018-02-27
    • 2023-03-19
    相关资源
    最近更新 更多