【发布时间】:2016-01-12 20:01:40
【问题描述】:
我的代码中有一个 cURL 请求,在本地运行时可以正常工作:
$url = "http://ipinfo.io/{$_SERVER['REMOTE_ADDR']}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
$locale = json_decode($response);
并按预期返回 JSON。但是,我们的生产系统在 Google App Engine 上,我在其中获得了浏览器的网站版本,而不是 JSON。
如果我改变,我可以让这个 cURL 请求工作
google_app_engine.enable_curl_lite = "1"
在我的项目根目录下php.ini到
extension = "curl.so"
但 Google 的 documentation 坚持前者将用于生产。此外,使用后者会破坏 Monolog 的 SlackHandler 之类的东西。
有没有办法从这个 cURL 请求中获取 JSON,同时仍然使用 Google 的“cURL Lite”?
【问题讨论】:
-
也许尝试设置一个空白的用户代理或将其设置为不太可能被视为浏览器的东西?当我从命令行运行您的代码时,我得到了预期的 JSON。当我明确地将用户代理设置为可识别为浏览器的东西时,我得到了 HTML。
-
@PatrickQ 谢谢!我在其他地方找到了帮助并在下面发布了答案。
标签: php json google-app-engine curl