【问题标题】:File_get_content and Curl return nothingFile_get_contents 和 Curl 什么都不返回
【发布时间】:2014-10-13 21:40:00
【问题描述】:

我实际上正在使用 Flickr api。我创建了我的 Url 请求,并将其发送到 file_get_contents。一切正常,但今天,一切都坏了!

当我在浏览器上直接使用请求时,一切正常,但是当我使用文件获取内容或 Curl 时,它返回一个空变量。

这是我的代码示例:

$flickr_result = file_get_contents($request);

或者卷曲:

$cl = curl_init();
curl_setopt($cl, CURLOPT_URL, $url);
curl_setopt($cl, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($cl);

allow_fopen_url 在我的 php.ini 上为“开启”。返回值不为假。

我不太明白,一切都很好。

编辑

这是 curl_getinfo 打印的内容:

[content_type] => text/html; charset=UTF-8 
[http_code] => 302 
[header_size] => 838 
[request_size] => 218 
[filetime] => -1 
[ssl_verify_result] => 0 
[redirect_count] => 0 
[total_time] => 0.312 
[namelookup_time] => 0 
[connect_time] => 0.015 
[pretransfer_time] => 0.015 
[size_upload] => 0 
[size_download] => 0 
[speed_download] => 0 
[speed_upload] => 0 
[download_content_length] => 0 
[upload_content_length] => 0 
[starttransfer_time] => 0.312 
[redirect_time] => 0 
[certinfo] => Array ( ) 
[primary_ip] => 69.147.76.173 
[primary_port] => 80 
[local_ip] => 127.0.0.1 
[local_port] => 51014 
[redirect_url] => https://flickr.com/services/rest/?method=flickr.photos.search&api_key=XXXXXX&license=1,2,3,4,5,6&sort=interestingness-desc&text=toto&per_page=50&format=php_serial 
[request_header] => GET /services/rest/?method=flickr.photos.search&api_key=XXXXXX&license=1,2,3,4,5,6&sort=interestingness-desc&text=toto&per_page=50&format=php_serial HTTP/1.1 Host: flickr.com Accept: */* 

【问题讨论】:

  • 任何错误或警告?
  • 没有错误和警告。 curl_getinfo 和 curl_ernno 不打印任何内容..
  • 你试过在浏览器中调用url吗?
  • 设置CURLINFO_HEADER_OUT 选项并向我们展示print_r(curl_getinfo($hc, CURLINFO_HEADER_OUT)); 的输出
  • curl_getinfo with header out 返回:GET /services/rest/?method=flickr.photos.search&api_key="I Hide my key"&license=1,2,3,4,5,6&sort =interestingness-desc&text=toto&per_page=50&format=php_serial HTTP/1.1 主机:flickr.com 接受:/

标签: php curl file-get-contents flickr


【解决方案1】:

编辑:现在看到您的 curl 输出,您会从 API 获得 302 重定向。

你不能使用 file_get_content 来解决这个问题,但你可以建议 curl 自己遵循重定向:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

您提出了多少请求?也许您已达到配额 - 或者 Flickr 禁用了您的 API 密钥。


取自https://www.flickr.com/services/developer/api/

限制:由于 Flickr API 非常易于使用,因此也很容易被滥用,这会威胁到所有依赖 Flickr API 的服务。为了帮助防止这种情况,我们限制了每个密钥对 API 的访问。如果您的应用程序在整个密钥中保持每小时 3600 次查询以下(这意味着您的集成的所有用户的总和),那么您会没事的。如果我们检测到您的密钥被滥用,我们将需要使密钥过期或将其关闭,以便为其他人(包括我们!)保留 Flickr API 功能。我们还会跟踪其他因素的使用情况,以确保没有 API 用户滥用系统。

【讨论】:

  • 我这天只调用了 api 10 或 15 次.. :/
  • 是的,您并没有过多地调用 API,您只是获得了重定向,我更新了我的答案以反映您的情况。
  • 嗯,现在可以了!在带有 CURLOPT_FOLLOWLOCATION 的本地 Curl 中不想工作,但在服务器上,它可以工作!真的谢谢你! (但我不知道为什么文件让内容停止工作..)谢谢!
  • file_get_content() 无法处理重定向,但由于除了协议之外的所有内容似乎都是相同的,我猜你向http 而不是https 提出了请求,看起来flickr API 将这些请求更改为 https - 因此您也可以将您的第一个请求 URL 更改为以 https://flickr.com/ 开头,并且您不再应该获得重定向
猜你喜欢
  • 1970-01-01
  • 2011-09-13
  • 2023-04-10
  • 2014-01-19
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
相关资源
最近更新 更多