PHP 使用 fsockopen/cURL 设置浏览器代理
Posted
技术标签:
【中文标题】PHP 使用 fsockopen/cURL 设置浏览器代理【英文标题】:PHP set browser agent with fsockopen/cURL 【发布时间】:2012-11-01 04:11:44 【问题描述】:我编写了一个爬虫,它显然被某些网站阻止了。我想做的是获取带有虚假用户代理 ID 的页面(类似于Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.12011-10-16 20:23:00
)。请注意,fsockopen()
不支持该功能,因此我尝试以不同的方式进行操作。
这是我的代码:
$sock = fsockopen($host, 80, $errno, $errstr, 30);
然后在下面,这是我用指针做的事情:
$request = "HEAD " . $path . " HTTP/1.1\r\n";
$request .= 'Host: ' . $host . "\r\n";
$request .= "Connection: Close\r\n\r\n";
fwrite($sock, $request);
再次,我如何设置一个假的浏览器代理?我可以在$request
字符串中设置它吗?
【问题讨论】:
您需要发送一个名为User-Agent
的标头以及任何浏览器字符串,以便设置用户代理。
如果您将其作为答案,我可以接受。
【参考方案1】:
如果您使用 php cURL(正如您在标签中建议的那样),您应该可以这样做:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.12011-10-16 20:23:00'));
【讨论】:
我需要更多的时间让服务器接受我来自 php 刮板的代码。【参考方案2】:使用 fsockopen,您可以像添加其他 Headers 选项一样添加用户代理:
$sock = fsockopen($host, 80, $errno, $errstr, 30);
$request = "HEAD " . $path . " HTTP/1.1\r\n";
$request .= 'Host: ' . $host . "\r\n";
$request .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.12011-10-16 20:23:00\r\n";
$request .= "Connection: Close\r\n\r\n";
fwrite($sock, $request);
用 PHP5.3 测试
【讨论】:
这应该是公认的答案。与 cURL 一样棒,这是解释如何使用 fsockopen() 执行此操作的唯一答案,就像 OP 特别要求的那样。 (它也帮助了我,因为有时你不能使用 cURL 的原因......)【参考方案3】:这对我有用
$cookie = tempnam ("/tmp", "CURLCOOKIE");
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_ENCODING, "" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # required for https urls
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
$content = curl_exec( $ch );
echo $content;
$response = curl_getinfo( $ch );
curl_close ( $ch );
【讨论】:
以上是关于PHP 使用 fsockopen/cURL 设置浏览器代理的主要内容,如果未能解决你的问题,请参考以下文章