1

我正在尝试通过url使用 Google 图片搜索来进行研究。那是在我放弃通过实际图像搜索之后,因为我无法真正让它工作。

到目前为止做了什么

使用 PHP,我可以向https://www.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png发出 HTTP 请求

如果您将该 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 的主页。

我见过这样的问题:Script to use Google Image Search with local image as input这似乎可以做到,但提问者没有遇到我遇到的同样问题

4

1 回答 1

2

Google 似乎正在根据您请求中的用户代理执行重定向。因此,如果您包含一个真正的用户代理 - 从真正的网络浏览器复制的东西 - 请求应该可以正常工作。

这是一些适用于我的示例 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;
于 2013-05-10T07:04:54.603 回答