如何不使用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
相关产品推荐
相关产品推荐

