cURL初始化并在重新加载页面后访问它

时间:2013-12-11 03:06:01

标签: php curl

我正在尝试在页面重新加载后使用cURL。首先,我需要从其他网站获取问题,然后我想询问用户有关此问题的答案,然后使用get / post将其发送到同一页面(我的页面) 之后: 使用cURL将答案发送到另一页。不幸的是,我收到了消息:

  

警告:curl_setopt():提供的参数不是有效的cURL句柄   资源

(页面重新加载后,$ ch变量不可见我可以用它做什么?) 我的代码:

if(!isset($_GET['answer']))
{
$cookie = tempnam ("/tmp", "CURLCOOKIE");
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch, CURLOPT_URL, $question_url );
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
$question = curl_exec($ch );
echo $question.
'<form name="input" method="get">
    Question: <input type="text" name="answer">
    <input type="submit" value="Send">
</form> ';
} else
{
   $postFields['answer'] = $_GET['answer'];
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_URL, $answer_url);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
   curl_exec ($ch);
}

我认为我可以在会话中初始化cURL,但它也不起作用。

1 个答案:

答案 0 :(得分:0)

请参阅将curl_init()置于条件之外。如果页面正在重新加载,那么它很可能永远不会被调用,这意味着你的curl连接不存在,因此错误。

$ch = curl_init();
if(!isset($_GET['answer']))
{
$cookie = tempnam ("/tmp", "CURLCOOKIE");
//removed
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch, CURLOPT_URL, $question_url );
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
$question = curl_exec($ch );
echo $question.
'<form name="input" method="get">
    Question: <input type="text" name="answer">
    <input type="submit" value="Send">
</form> ';
} else
{
   $postFields['answer'] = $_GET['answer'];
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_URL, $answer_url);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
   curl_exec ($ch);
}

通过这种方式,无论条件运行的哪个部分,您都知道您将始终拥有该句柄。尽管PHP中的条件在if中定义的变量没有范围(该变量可以在if之外访问),但如果if(太多ifs)从不运行开始,那么变量将永远不会存在范围。