卷曲方法GET不起作用

时间:2011-09-20 08:56:50

标签: php curl

我一直试图让curl从表单中发送GET方法。我构建了URL,其中包含所有连接的表单数据。如果我直接在地址栏中输入get请求它可以工作,但不能使用curl。如果我回显$ data,我会收到一条错误,指出“找不到对象!”我尝试显示curl_error()内容并返回空。非常感谢大家的帮助。

这是我到目前为止所做的:

$url = complete url of get request that works when directly placed into adress bar
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec ($ch);
curl_close ($ch);
echo $data;

感谢您帮助我。我尝试了以下代码,它确实说“成功”。当我回显$ data时,我看到一瞬间的“成功”,然后我得到“找不到对象!”错误。

$url = complete url of get request that works when directly placed into adress bar
$ch = curl_init($url);
if ($ch) {
    echo "Success";
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec ($ch);
    curl_close ($ch);

}
else {
    echo "Could not initialize curl session";
}

我可能会收到错误,因为我转发GET的链接会将其转发到另一个链接以处理数据。

5 个答案:

答案 0 :(得分:2)

尝试添加

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;

这应该强制它将数据作为字符串返回而不是输出它。

有关详细信息,请参阅the documentation

答案 1 :(得分:0)

尝试使用CURLOPT_RETURNTRANSFER选项:

   $ch = curl_init();
    $url = complete url of get request that works when directly placed into adress bar
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $data = curl_exec ($ch);
    curl_close ($ch);
    echo $data;

答案 2 :(得分:0)

我相信你错过了一个初始化会话的curl_init。

使用建议的代码进行修改

尝试复制并粘贴以下代码:

$url = complete url of get request that works when directly placed into adress bar
$ch = curl_init($url);
if ($ch) {
    echo "Success";
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec ($ch);
    curl_close ($ch);
    echo $data;
}
else {
    echo "Could not initialize curl session";
}

如果卷曲会话成功初始化,请告诉我们。

答案 3 :(得分:0)

我遇到了同样的问题并按如下方式解决了这个问题:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POSTFIELDS , null );
    curl_setopt($ch, CURLOPT_POST , 0);
    curl_setopt($ch, CURLOPT_HTTPGET , TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER , TRUE);
    curl_setopt($ch, CURLOPT_TIMEOUT , 4);
    curl_setopt($ch, CURLOPT_USERAGENT , "" );
    curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
    curl_setopt($ch, CURLOPT_URL , $url );
    $rgxrData = curl_exec($ch);  // rgxrData stands for response get xml raw Data
    echo "Get curl_errno = " ;
    echo curl_errno($ch) ;

    if (curl_errno($ch)) {
            $error_message = curl_error($ch);
            $error_no = curl_errno($ch);

            echo "error_message: " . $error_message . "<br>";
            echo "error_no: " . $error_no . "<br>";
    }
    curl_close($ch);

    return $rgxrData;

请务必按照正确的重置顺序从帖子中获取。即首先将postfields设置为null,然后将其发布为0,然后将httpget设置为true。一旦你设置了这个,那么你可以放心,服务器将开始准备下一个请求,就像get请求一样。此后,设置选项的其余部分和URL(以及所有参数)。这将确保正确地生成和执行get请求。

希望这会有所帮助......

答案 4 :(得分:0)

请尝试使用http_build_query()函数创建查询字符串,我认为这会有所帮助,在我的情况下是有效的