我试图通过url使用谷歌图像搜索用于研究目的。那是在我放弃按实际图像搜索之后,因为我不能真正让它工作。
使用PHP,我可以发出一个HTTP请求https://www.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png
如果你把这个URL复制到你的浏览器中,你会看到结果(这里似乎发生了一些自动重定向)。
但是,如果您尝试手动请求URL,例如通过PHP或通过http://web-sniffer.net/?url=images.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png,您会得到一个HTTP 302错误,表示页面已移动到其他URL。
我提取了那个URL,在浏览器上试了试,再次成功了。但是,如果你手动尝试这个URL,你会得到另一个HTTP 302错误,最终带你到谷歌的主页。
我见过这样的问题:脚本使用谷歌图像搜索与本地图像作为输入,似乎已经能够做到这一点,但提问者没有遇到同样的问题我做了
似乎Google正在执行基于您请求中的User-Agent的重定向。因此,如果您包含一个真正的User-Agent——从真实的web浏览器复制的东西——请求应该能正常工作。
这里是一些php代码的例子,为我工作:
$location = 'http://www.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png';
do {
$ch = curl_init($location);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.0; rv:20.0) Gecko/20100101 Firefox/20.0');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = str_replace("'r'n","'n",$data);
list($headers, $data) = explode("'n'n", $data, 2);
$headers = explode("'n",$headers);
$location = null;
foreach ($headers as $header)
if (stripos($header, 'Location:', 0) === 0)
$location = trim(substr($header,9));
} while ($http_code == 302 && $location != null);
echo $data;