You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用yield在Roach PHP中发起GET请求?

不用yield在Roach PHP中发起GET请求的方法

当然可以不用yield来发起请求,你之前的写法只是创建了请求对象,但没有触发实际的请求发送——Roach默认通过生成器(yield)把请求交给框架调度器执行,手动触发请求需要直接使用Roach的HTTP客户端。

具体实现方式

1. 直接使用Roach的Client发送请求

use RoachPHP\Http\Client;
use RoachPHP\Http\Request;

// 创建客户端实例
$client = Client::create();

// 构建请求对象
$request = new Request(
    'GET',
    'https://stackoverflow.com/'
);

// 发送请求并获取响应
$response = $client->send($request);

// 调用你的解析方法处理响应
$result = $this->testParse($response);

2. 在Spider类内部手动执行

如果是在自定义的Spider类里,也可以直接调用客户端发送请求,无需依赖yield:

public function handle()
{
    $client = $this->getClient();
    
    $request = $this->request(
        'GET',
        'https://stackoverflow.com/'
    );
    
    $response = $client->send($request);
    $data = $this->testParse($response);
    
    // 自行处理解析后的数据
}

为什么之前的写法无效?

  • 直接new Request(...)或者调用$this->request(...)只是生成了请求对象,并没有实际发送HTTP请求,这些对象需要被Roach的调度器处理才会执行请求——yield就是把请求对象提交给调度器的标准方式。
  • new GuzzleRequest(...)是Roach对Guzzle请求的封装,同样需要通过客户端发送才会得到响应,实例化对象本身不会触发请求。

内容的提问来源于stack exchange,提问作者Alex Victorov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:12:09