加了proxy后,偶爾成功,偶爾失敗,失敗了就會報(bào)錯(cuò)這個(gè);
之前使用的是workerman:beta版本, 最近升級到rc就報(bào)錯(cuò)了。
感覺是TcpConnection或者AsyncTcpConnection的問題。
求大佬@walkor,指點(diǎn)迷津
demo.php
use Workerman\Worker;
require __DIR__.'/vendor/autoload.php';
/**
* Workerman: v5.0.0-rc.2
* http-client: v2.2.8
* revolt/event-loop:v1.0.6
* event: revolt
*
*/
$worker = new Worker();
// $worker->count = 4;
$worker->onWorkerStart = function () {
$http = new Workerman\Http\Client([
'max_conn_per_addr' => 128,
'keepalive_timeout' => 60,
'connect_timeout' => 5,
'timeout' => 30,
]);
$option = [
'method' => 'GET',
'headers' => [],
'data' => '',
'proxy' => 'http://127.0.0.1:1279',
];
$response = $http->request('http://myip.ipip.net/', $option);
echo (string) $response?->getBody().PHP_EOL;
};
Worker::runAll();
InvalidArgumentException: Invalid response string: Content-Length: 0 in /vendor/workerman/http-client/src/Request.php:339
Stack trace:
#0 /vendor/workerman/workerman/src/Connection/TcpConnection.php(674): Workerman\Http\Request->onMessage(Object(Workerman\Connection\AsyncTcpConnection), 'Content-Length:...')
#1 /vendor/workerman/workerman/src/Events/Revolt.php(147): Workerman\Connection\TcpConnection->baseRead(Resource id #75)
#2 /vendor/revolt/event-loop/src/EventLoop/Internal/AbstractDriver.php(589): Workerman\Events\Revolt::Workerman\Events\{closure}('l', Resource id #75)
#3 [internal function]: Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal\{closure}()
#4 /vendor/revolt/event-loop/src/EventLoop/Internal/AbstractDriver.php(497): Fiber->resume()
#5 /vendor/revolt/event-loop/src/EventLoop/Internal/AbstractDriver.php(553): Revolt\EventLoop\Internal\AbstractDriver->invokeCallbacks()
#6 [internal function]: Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal\{closure}()
#7 /vendor/revolt/event-loop/src/EventLoop/Internal/AbstractDriver.php(94): Fiber->start()
#8 /vendor/revolt/event-loop/src/EventLoop/Internal/DriverSuspension.php(117): Revolt\EventLoop\Internal\AbstractDriver->Revolt\EventLoop\Internal\{closure}()
#9 /vendor/workerman/http-client/src/Client.php(89): Revolt\EventLoop\Internal\DriverSuspension->suspend()
#10 /demo.php(32): Workerman\Http\Client->request('http://myip.ipi...', Array)
#11 /vendor/workerman/workerman/src/Worker.php(2411): {closure}(Object(Workerman\Worker))
#12 /vendor/workerman/workerman/src/Worker.php(1597): Workerman\Worker->run()
#13 /vendor/workerman/workerman/src/Worker.php(1404): Workerman\Worker::forkOneWorkerForLinux(Object(Workerman\Worker))
#14 /vendor/workerman/workerman/src/Worker.php(1384): Workerman\Worker::forkWorkersForLinux()
#15 /vendor/workerman/workerman/src/Worker.php(556): Workerman\Worker::forkWorkers()
#16 /demo.php(36): Workerman\Worker::runAll()
#17 {main}
系統(tǒng):MAC/linux
Workerman: v5.0.0-rc.2
http-client: v2.2.8
event: revolt
revolt/event-loop:v1.0.6
1.TcpConnection中baseRead方法的 548行:
$buffer = @\fread($socket, self::READ_BUFFER_SIZE);
獲取到的buffer偶爾會攜帶"Content-Length: 0" 開頭
"Content-Length: 0
HTTP/1.1 200 OK
Date: Fri, 22 Nov 2024 03:36:49 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 70
Connection: close
Server: WAF
X-Edge: bj-tel
Access-Control-Allow-Headers: *
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
X-Request-Id: d8dc96b5b696cb8f22c4f6f5b4f77c8b
X-Cache: BYPASS
Accept-Ranges: bytes
......
"