我有一些调用cURL库的PHP代码。我用它来获取JSON数据。
我已将cURL选项'CURLOPT_RETURNTRANSFER'设为1,但仍会获取状态代码..
代码如下:
<?php
function fetch_page($url)
{
$ch = curl_init();
$array = array(
'include'=>'ayam'
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close ($ch);
return $result;
}
$return = fetch_page(MY_LINK_URL);
echo json_decode($return);
?>
答案 0 :(得分:4)
看起来很正确。我实际上有同样的问题,但当我添加
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
它正确返回json代码而不是返回1(True)。
答案 1 :(得分:3)
代码看起来完全正确。在返回之前尝试var_dump($result)
以查看其确切内容。
另外,将CURLOPT_HEADER
设置为1并检查浏览器中输出的查看源;这两个都可以帮助调试问题。编辑问题并发布结果,如果这样我们可以更有效地帮助。
更新:由于您使用的是HTTPS,因此请添加
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
答案 2 :(得分:3)
根据PHP docs,
成功时返回TRUE或FALSE返回 失败。但是,如果 CURLOPT_RETURNTRANSFER选项已设置, 它会在成功时返回结果, 失败就错了。
这意味着你应该得到 成功:结果 失败:FALSE(回显为0)
此外,如果您要获取JSON并需要访问它,请使用 json_decode()而不是json_encode()。
答案 3 :(得分:0)
好吧,你应该告诉我们你指向的网址(以及你正在运行的php的版本)。 我在“www.google.com”上尝试过使用php 5.3,它按预期工作($ result包含整个网页)
答案 4 :(得分:0)
可能有类似的问题: - cURL on local dev network problem with virtual host naming
在关闭卷曲手柄之前输出:
$result = curl_exec ($ch);
print_r(curl_getinfo($ch));
curl_close ($ch);
这是我绕过虚拟主机的解决方案
// This is your Virtual Hosts name
$request_host = 'dev.project';
// This is the IP
$request_url = '192.168.0.1';
$headers = array("Host: ".$request_host);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, $request_url.'?'.$request_args);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
答案 5 :(得分:0)
似乎有很多原因可以忽略CURLOPT_RETURNTRANSFER
,而SSL证书检查只是其中之一:
在我的案例中,罪魁祸首是CURLOPT_POST
,我将其设为true
。我期望得到一个由HTTP响应头加上响应本身组成的字符串。相反,我获得了状态代码1
。去搞清楚。谢天谢地,我不需要HTTP头,所以我的解决方案是:
curl_setopt($ch, CURLOPT_HEADER, false);
如果我确实需要标题信息,我不知道我会做什么。我浪费了大量的时间来追查问题。
该死的PHP卷曲! (愤怒地挥拳)