Stack Overflow上有很多这样的问题。其他地方,但它们似乎都适用于早期版本的PHP,因为它们的答案引用CURLOPT_RETURNTRANSFER
,open_basedir
和allow_url_include
。
我使用的是PHP 5.4.17。这是我的代码:
$curl = curl_init();
if ($curl === False)
{
die('Fatal error initiating CURL');
}
curl_setopt_array($curl,
array(CURLOPT_HTTPGET => True,
CURLOPT_RETURNTRANSFER => True,
CURLOPT_FOLLOWLOCATION => True,
CURLOPT_URL => $gatewayURL . $parameters
));
$rawJasonData = curl_exec($curl);
curl_close($curl);
if ($rawJasonData === False)
代码似乎没问题 - 虽然我承认这是我第一次使用CURL - 因为返回的JSON数据被回显。
我想在变量中捕获它,我该怎么做(不使用输出缓冲)?
[更新]我某些我自己没有var_dump()
或echo
结果。不是1而不是True,也不是大写TRUE有任何区别。
我在本地开发,但在我的网址中使用Windows HOST文件中的条目,而不是localhost。
答案 0 :(得分:1)
可能不是问题,但是:
curl_setopt_array($curl,
array(CURLOPT_HTTPGET => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => $gatewayURL . $parameters));
在以前的PHP版本中,我在设置curl选项时遇到了使用True的重大问题。给1打一看,看看会发生什么。这对我有用,但这可能是由于我工作的环境。只是想提一下,以防你有一些奇怪的环境(就像我有的那样)造成了最奇怪的问题。
至于个人偏好,我更喜欢使用以下方法来设置选项:
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_CURLOPT_HTTPGET, 1);
关于你的问题 - 我会删除CURLOPT_FOLLOWLOCATION,因为它会遵循重定向,你不应该在你的情况下。
我怀疑CURLOPT_FOLLOWLOCATION是这里的问题。
答案 1 :(得分:1)
不确定为什么cURL不适合你,但由于你只是在做一个简单的GET请求,为什么不这样做呢?
$rawJasonData = file_get_contents($gatewayURL.$parameters);
答案 2 :(得分:0)
我看到代码的一大问题是True
和False
中的第一个大写字母应该是TRUE
和FALSE
。以下是我的代码的重构版本应该可以工作:
$curl = curl_init();
if (!$curl) {
die('Fatal error initiating CURL');
}
$curl_options = array();
$curl_options['CURLOPT_HTTPGET'] = TRUE;
$curl_options['CURLOPT_RETURNTRANSFER'] = TRUE;
$curl_options['CURLOPT_HTTPGET'] = TRUE;
$curl_options['CURLOPT_HTTPHEADER'] = array('Content-Type: application/json', 'Accept: application/json');
$curl_options['CURLOPT_URL'] = $gatewayURL . $parameters;
curl_setopt_array($curl, $curl_options);
$rawJasonData = curl_exec($curl);
curl_close($curl);
if (!$rawJasonData)
我将CURLOPT_HTTPGET
添加为TRUE
以强制GET
curl中的行为以及CURLOPT_HTTPHEADER
中与JSON相关的标头。
过去所有这些都设置为=== False
的检查有点过分。只需设置if (!$curl) {
和if (!$rawJasonData)
即可按预期工作。
如果仍然以某种方式不起作用,请将TRUE
值更改为1
,如下所示:
$curl_options = array();
$curl_options['CURLOPT_HTTPGET'] = 1;
$curl_options['CURLOPT_RETURNTRANSFER'] = 1;
$curl_options['CURLOPT_HTTPGET'] = 1;