【问题标题】:curl cookie not creating on successcurl cookie 未成功创建
【发布时间】:2011-02-02 00:31:18
【问题描述】:

我正在使用 cUrl(PHP) 发布登录请求并将响应存储在 cookie 文件中。 在我的第二个请求中,我在标头中传递 cookie 并发布数据以验证它。

问题是在第一个成功请求中没有创建 cookie 文件导致第二个请求失败。请建议我哪里做错了。

$cookiefile="/var/www/html/dimdim/cook.txt";
$url_log="http://my.dimdim.com/api/auth/login";
$p_log='request={"account":"bin6k","password":"password","group":"all"}';
$url_ver="http://my.dimdim.com/api/auth/verify";
$p_ver='request={"account":"bin6k","password":"password","group":"all"}';

$ch = curl_init();
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);

curl_setopt($ch, CURLOPT_URL,$url_log);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $p_log);

ob_start();      // prevent any output
$retval=curl_exec ($ch); // execute the curl command
ob_end_clean();  // stop preventing output
curl_close ($ch);
//print_r($retval);
unset($ch);


$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_URL,$url_ver);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $p_log);

$buf2 = curl_exec ($ch);

curl_close ($ch);

echo "<PRE>".htmlentities($buf2);

【问题讨论】:

    标签: php cookies curl


    【解决方案1】:

    尝试在其中添加curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);

    此外,无需为每个请求启动一个新的 curl 实例。您可以为多个请求重用同一个实例。每次只需设置适当的 CURLOPT(url、postfields、get 等),curl 就会在内部进行整理。

    【讨论】:

      【解决方案2】:

      试试这个添加了cookiejar选项的功能:

      function execute($toLoad) {
      
          if ( !preg_match( '/^http/', $toLoad ) ) {
              $toLoad = 'http://'.$toLoad;
          }
          $cookiefile = APP_PATH.'tmp/cookie.txt';
          $data = array();    
          $ch = curl_init();
      
          curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
          curl_setopt($ch, CURLOPT_TIMEOUT,10);
          curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
          curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20091216 Fedora/3.5.6-1.fc11 Firefox/3.5.6 GTB6");
          curl_setopt($ch, CURLOPT_URL, $toLoad); // The page to download
          curl_setopt($ch, CURLOPT_HEADER, 0);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_REFERER, 'http://somesite.com/' ); 
          curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); 
          curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);    
      
          $data['data'] = curl_exec($ch);
          $data['status'] = curl_getinfo($ch);
      
          //$this->out(curl_error($ch));   
          //$this->out(curl_getinfo($ch));     
          //$this->out('');
          //$this->out($data);
          //$this->out('');
      
          curl_close($ch);
      
          return $data;
      }
      

      您也可以尝试读取 Set-Cookie: SOMEKEY 返回数据的标头

      然后在 curlopt 中使用

      if ($header) {
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Cookie:'.$header)); 
      } 
      

      谢谢

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,用它在 windows localhost 服务器中运行

        curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookies.txt");
        curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "/cookies.txt");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-20
          • 2017-06-04
          • 2021-03-28
          • 1970-01-01
          • 1970-01-01
          • 2012-01-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多