我在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'
。我在做什么错了?
答案 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);
}