我正在尝试使用 url 的Google图片搜索进行研究。那是在我放弃了实际图像搜索之后,因为我无法真正开始工作。
到目前为止做了什么
使用PHP,我可以向https://www.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png
发出HTTP请求如果您将该网址复制到浏览器中,您会看到结果(此处会显示一些自动重定向)。
但是,如果您尝试通过PHP手动请求URL,或者通过http://web-sniffer.net/?url=images.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png,则会收到HTTP 302错误,指出该页面已移至其他某个URL。
我提取了该网址,在浏览器上进行了尝试,然后再次运行。但是,如果您手动尝试此URL,则会再次出现HTTP 302错误,最终会将您带到Google的主页。
我见过这样的问题:Script to use Google Image Search with local image as input似乎能够做到这一点,但提问者没有遇到我遇到的同样的问题
答案 0 :(得分:2)
Google似乎正在根据您的请求中的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;