已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 讨论/求助

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

作者: @Ta

时间: 2021-02-23发布,2021-02-23修改

点击: 6289


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

看来是读取内容的时候出问题了?这是为啥的呢。

[隐藏样式|查看源码]


『回复列表(12|隐藏机器人聊天)』

1. 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/2021-02-23 13:53//)

2. 万能的虎友
(/@Ta/2021-02-23 13:54//)

3.

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

(/@Ta/2021-02-23 13:57//)

4.

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

(/@Ta/2021-02-23 13:57//)

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

6.

@大尨

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/2021-02-23 14:14//)

7.

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

(/@Ta/2021-02-23 14:08//)

8. @老虎会游泳

还有个地方很疑惑的是,
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/2021-02-23 14:39//)

9.

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

(/@Ta/2021-02-23 14:40//)

10. @老虎会游泳,这是我要测试的 链接跟代码,你下载 高 于 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/2021-02-23 21:42//)

11. @老虎会游泳
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/2021-02-23 14:51//)

12. 改CURL_HTTP_VERSION_1_0也不行。
(/@Ta/2021-02-23 15:11//)

回复需要登录

9月3日 03:54 星期三

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1