无法使用代理使用PHP Guzzle播放视频流

时间:2019-10-03 09:44:43

标签: guzzle

我在Laravel上使用了Guzzle 6.3。我有以下代码:

$url = 'http://dest_ip:dest_port';

$client = new Client();

$res = $client->request('GET', $url, [
    //    'proxy' => 'http://proxy_ip:80',
        'stream' => true,
    ]);

$body = $res->getBody();

header("Content-Type:{$res->getHeader('Content-Type')[0]}");

while (! $body->eof())
    echo $body->read(256);

它工作正常,但是如您所见,我注释了代理设置行。当我尝试使用它时会返回错误:

  

创建资源时出错:[消息] fopen(http://dest_ip:dest_port):无法打开流:无法找到套接字传输“ http”-在配置PHP时是否忘记启用它?

如果我使用tcp作为代理:

'proxy' => 'tcp://proxy_ip:80'

它不会给我任何错误,而是会导致代理服务器上的目录'/var/www/html'。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

好吧,我终于找到了解决方案。我必须更深入地研究并使用fsockopen()处理流。

$fp = fsockopen($proxy_ip, $proxy_port, $errno, $errstr, 30);

if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET http://$url:$port\r\nConnection: keep-alive\r\nHTTP/1.1\r\n\r\n";
    fwrite($fp, $out);

    while (!feof($fp)) {
        echo fgets($fp, 256);
    }
    fclose($fp);
}