php curl 这个错误什么处理,折腾好久了

@Ta 02-23 13:52发布,02-23 13:55修改 503点击

%[F6AF[C1RTZC]5P{GEBEAF.png

看来是读取内容的时候出问题了?这是为啥的呢。
回复列表(12)
  • @Ta / 02-23 13:53
    PHP Fatal error:  Uncaught GuzzleHttp\Exception\RequestException: cURL error 23: Failed reading the chunked-encoded stream (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
  • @Ta / 02-23 13:54
    万能的虎友
  • @Ta / 02-23 13:57

    @大尨,程序不支持chunked编码,把请求HTTP协议设为1.0可解,因为HTTP/1.0没有chunked编码。

  • @Ta / 02-23 13:57

    @大尨,还有,要注意,是GuzzleHttp不支持chunked编码,不是curl不支持,curl本身不处理chunked编码,它只是原样返回被chunked编码的内容,需要GuzzleHttp自己去解码。

  • @Ta / 02-23 14:01
    @老虎会游泳,HTTP协议设为1.0 这个什么操作?把https 改成 http ?
  • @Ta / 02-23 14:14

    @大尨

    use GuzzleHttp\Client;
    
    $client = new Client();
    $client->get('https://hu60.cn/', [
        'curl' => [
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0,
        ],
        'debug' => true,
    ]);
    

    此时,你使用的是 HTTP/1.0 over TLS 协议,也就是在 TLS 保护下的 HTTP/1.0。


    use GuzzleHttp\Client;
    
    $client = new Client();
    $client->get('https://hu60.cn/', [
        'curl' => [
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        ],
        'debug' => true,
    ]);
    

    此时,你使用的是 HTTP/1.1 over TLS 协议,也就是在 TLS 保护下的 HTTP/1.1。


    use GuzzleHttp\Client;
    
    defined('CURL_HTTP_VERSION_2') || define('CURL_HTTP_VERSION_2', 3);
    
    $client = new Client();
    $client->get('https://hu60.cn/', [
        'curl' => [
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2,
        ],
        'debug' => true,
    ]);
    

    此时,你使用的是 HTTP/2 over TLS 协议,也就是在 TLS 保护下的 HTTP/2。

  • @Ta / 02-23 14:08

    至于https,是指 HTTP over TLS,也就是在TLS保护下的HTTP(包括HTTP 1.0/1.1/2)。

  • @Ta / 02-23 14:39
    @老虎会游泳

    还有个地方很疑惑的是,
    php -v
    PHP 7.1.13 (cli) (built: Jan  3 2018 20:14:59) ( NTS MSVC14 (Visual C++ 2015) x86 )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    下载:https://windows.php.net/downloads/releases/archives/php-7.1.13-nts-Win32-VC14-x64.zip

    测试成功,没问题。都不用修改:
        'curl' => [
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        ],
    也能成。

    但是我在 php7.3.4nts 上测试就报错,修改协议也报错。
  • @Ta / 02-23 14:40

    @大尨CURL_HTTP_VERSION_1_0也不行吗,那只能说你下载的这个版本,php curl模块有问题。

  • @Ta / 02-23 21:42
    @老虎会游泳,这是我要测试的 链接跟代码,你下载 高 于 7.1.13 的版本试试。

    <?php
    use GuzzleHttp\Client;
    require_once __DIR__ . '/vendor/autoload.php';
    $client = new Client();
    $userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36';
    $headers = [
        'User-Agent'=> $userAgent,
    ];
    $url = '(搞定)已隐藏'; //{勉强}
    $response = $client->get($url, [
        'headers'  => $headers,
        // 'curl' => [
        //     CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0,
        // ],
        'debug' => true,
    ]);
    $body = (string)$response->getBody();
    var_dump($body);
    
  • @Ta / 02-23 14:51
    @老虎会游泳
    php -v
    PHP 7.3.4 (cli) (built: Apr  2 2019 21:57:22) ( NTS MSVC15 (Visual C++ 2017) x64 )
    Copyright (c) 1997-2018 The PHP Group
    Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies

    这个就不行。
  • @Ta / 02-23 15:11
    改CURL_HTTP_VERSION_1_0也不行。
添加新回复
回复需要登录

[聊天-此处没有老虎] 寻梦xunm:@戴眼镜的肥驴,@yucho, 广告位一个草根小破站http://huue.cn虎阅网自制小尾巴