Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按URL搜索Google图像,无法抓取页面_Php_Curl_Web Crawler_Google Image Search - Fatal编程技术网

Php 按URL搜索Google图像,无法抓取页面

Php 按URL搜索Google图像,无法抓取页面,php,curl,web-crawler,google-image-search,Php,Curl,Web Crawler,Google Image Search,我试图通过url使用谷歌图像搜索进行研究。那是在我放弃按实际图像搜索之后,因为我无法真正让它工作 到目前为止做了什么 使用PHP,我可以向 如果您将该URL复制到浏览器中,就会看到结果(这里似乎发生了一些自动重定向) 但是,如果您尝试手动请求URL,例如通过PHP,或者通过HTTP 302,则会出现一个错误,表明页面已移动到其他URL 我提取了那个URL,在浏览器上试用了一下,它又能正常工作了。但是,如果你手动尝试这个URL,你会得到另一个HTTP302错误,它最终会把你带到谷歌的主页 我看到过

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

到目前为止做了什么

使用PHP,我可以向

如果您将该URL复制到浏览器中,就会看到结果(这里似乎发生了一些自动重定向)

但是,如果您尝试手动请求URL,例如通过PHP,或者通过HTTP 302,则会出现一个错误,表明页面已移动到其他URL

我提取了那个URL,在浏览器上试用了一下,它又能正常工作了。但是,如果你手动尝试这个URL,你会得到另一个HTTP302错误,它最终会把你带到谷歌的主页


我看到过这样的问题:似乎能够做到这一点,但询问者没有遇到与我遇到的问题相同的问题。谷歌似乎正在根据您请求中的用户代理执行重定向。因此,如果包含一个真正的用户代理(从真正的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;

你会发现这很有用。但问题是,没有官方的反向图像搜索API,这是故意的。不仅仅是用户代理,而是循环,只要出现302错误,循环就会继续请求。以及
curl\u setopt($ch,CURLOPT\u RETURNTRANSFER,true),在我的在线服务器上运行。另一个命令是curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1)
可以让它在我的本地主机上工作,但由于某些原因,这个命令与您的命令不同,不能在我的服务器上工作。谢谢对不起,我以为你控制了302部分,所以我没有提到。据我所知,FOLLOWLOCATION选项在安全模式下被禁用。这可能就是为什么不能在live server上使用它的原因。