为什么cURL总是返回状态代码?

时间:2011-04-01 13:35:07

标签: php curl

我有一些调用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);
?>

6 个答案:

答案 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卷曲! (愤怒地挥拳)