Возникли проблемы с использованием CURL и PHP для получения результатов поиска Google через прокси
Этот скрипт прекрасно работает при получении google.com, но не с google.com/search?q=test. Когда я не использую CURLOPT_FOLLOWLOCATION, я получаю 302 Move. Когда я его использую, я получаю страницу с просьбой ввести капчу. Я пробовал несколько различных прокси на основе США и изменил строку агента пользователя. Есть что-то, чего я здесь не хватает?
function my_fetch($url,$proxy,$user_agent='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8')
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_PROXY, $proxy);
curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_REFERER, 'http://www.google.com/');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt ($ch, CURLOPT_TIMEOUT, 20);
$result = curl_exec ($ch);
curl_close ($ch);
return $result;
}
$url = 'http://www.google.com/search?q=test';
$proxy = '152.26.53.4:80';
echo my_fetch($url,$proxy);
Пожалуйста, не отвечайте с предложениями использовать API вместо этого. API не достаточно для моих нужд.
2 ответа
Google больше не для cURL.
Google больше не предоставляет доступ через Curl, он может дать вам сообщение 302 Moved. Если вы хотите использовать его, вы должны использовать API для него.
Спасибо
Вы можете попытаться сделать это с PhantomJS:
var page = require("webpage").create();
var homePage = "http://www.google.com/";
page.open(homePage);
page.onLoadFinished = function(status) {
var url = page.url;
console.log("Status: " + status);
console.log("Loaded: " + url);
page.includeJs("http://code.jquery.com/jquery-1.8.3.min.js", function() {
console.log("Loaded jQuery!");
page.evaluate(function() {
var searchBox = $(".lst");
var searchForm = $("form");
searchBox.val("your query");
searchForm.submit();
});
});
window.setTimeout(
function () {
page.render( 'google.png' );
phantom.exit(0);
},
1000 // wait 5,000ms (5s)
);
};