编程语言
首页 > 编程语言> > php – 如何在Guzzle中捕获cURL使用的IP?

php – 如何在Guzzle中捕获cURL使用的IP?

作者:互联网

我正在使用Goutte(内部使用Guzzle)进行网络抓取项目.我正在研究自定义速率限制器,因此我将所有HTTP操作存储到数据库表中,以便我可以检查是否在最近的时间范围内对主机进行了调用.

目前我正在使用gethostbyname将已知主机名转换为IP地址,但Guzzle已经进行了查找,因此这可能是浪费.此外,主机名可能会解析为多个IP地址(因此需要gethostbynamel),因此我自己导出的IP实际上可能不是Guzzle使用的IP(但是,猜测,PHP上可能会有一些缓存)将使gethostbyname成为可能的级别返回正确的结果).

我已经为Guzzle订阅了一个插件,它会从cURL返回一些非常有趣的数据,以便做到这一点.可悲的是,IP地址不在其中.必须有办法解决这个问题 – 任何想法?

class HttpLoggerPlugin implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            'request.complete' => 'onRequestComplete',
        );
    }

    /**
     * Handles the request complete event (for both success/failed)
     * 
     * @param \Guzzle\Common\Event $event
     */
    public function onRequestComplete(Event $event)
    {
        $request = $event['request'];
        $host = $request->getHost();

        $ip = gethostbyname($host);
        $response = $event['response'];
        $responseCode = $response ? $response->getStatusCode() : null;
        // Try to get cURL data here
        echo $response ? print_r($response->getInfo(), true) : null;
    }
}

这就是$response-> getInfo()返回的内容:

 Array(
        [url] => http://example.com/page.html
        [content_type] => text/html
        [http_code] => 200
        [header_size] => 228
        [request_size] => 149
        [filetime] => -1
        [ssl_verify_result] => 0
        [redirect_count] => 0
        [total_time] => 1.209516
        [namelookup_time] => 0.559758
        [connect_time] => 0.954811
        [pretransfer_time] => 0.954916
        [size_upload] => 0
        [size_download] => 22390
        [speed_download] => 18511
        [speed_upload] => 0
        [download_content_length] => 22390
        [upload_content_length] => 0
        [starttransfer_time] => 1.056913
        [redirect_time] => 0
        [certinfo] => Array()
        [redirect_url] => 
 )

解决方法:

使用curl_getinfo($ch,CURLINFO_PRIMARY_IP)或查看curl_getinfo($ch)的“primary_ip”键/值.

你的PHP版本是什么?您必须使用旧版本.

标签:php,curl,guzzle,goutte
来源: https://codeday.me/bug/20190629/1324843.html