【问题标题】:Passing cookie using cURL使用 cURL 传递 cookie
【发布时间】:2011-10-10 17:41:43
【问题描述】:

我意识到这已经被报道了很多次,但由于某种原因它仍然不适合我。我正在尝试通过 cURL 将 cookie 传递给页面,但目标页面仍然无法获取它。

相关代码如下。

        $cookie = "did=1";
        $ch = curl_init();
    $cj=tempnam("/","cookiejar");
        curl_setopt( $ch, CURLOPT_URL, $url );
        curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
        curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1;       en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13')" );
        curl_setopt( $ch, CURLOPT_COOKIE, $cookie );
        curl_setopt( $ch, CURLOPT_ENCODING, "" );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch, CURLOPT_AUTOREFERER, true );

谢谢。

【问题讨论】:

    标签: php cookies curl


    【解决方案1】:

    这是如何通过 curl 使用 cookie 的示例,并注意它,你应该有写权限才能做到这一点。 http://curl.phptrack.com

    $url = "http://curl.phptrack.com/login.php"; // URL
    $POSTFIELDS = 'name=admin&password=guest&submit=save';
    $reffer = "http://curl.phptrack.com/index.php";
    $agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
    $cookie_file_path = "C:/Inetpub/wwwroot/spiders/cookie/cook"; // Please set your Cookie File path. This file must have CHMOD 777 (Full Read / Write Option).
    
    $ch = curl_init();  // Initialize a CURL session.     
    curl_setopt($ch, CURLOPT_URL, $url);  // The URL to fetch. You can also set this when initializing a session with curl_init(). 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); // The contents of the "User-Agent: " header to be used in a HTTP request. 
    curl_setopt($ch, CURLOPT_POST, 1); //TRUE to do a regular HTTP POST. This POST is the normal application/x-www-form-urlencoded kind, most commonly used by HTML forms. 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$POSTFIELDS); //The full data to post in a HTTP "POST" operation. 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // TRUE to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly. 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // TRUE to follow any "Location: " header that the server sends as part of the HTTP header (note this is recursive, PHP will follow as many "Location: " headers that it is sent, unless CURLOPT_MAXREDIRS is set). 
    curl_setopt($ch, CURLOPT_REFERER, $reffer); //The contents of the "Referer: " header to be used in a HTTP request. 
    
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); // The name of the file containing the cookie data. The cookie file can be in Netscape format, or just plain HTTP-style headers dumped into a file. 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); // The name of a file to save all internal cookies to when the connection closes. 
    
    $result = curl_exec($ch);  // grab URL and pass it to the variable.
    curl_close($ch);  // close curl resource, and free up system resources.
    
    echo $result; // Print page contents.
    
    ?>
    

    【讨论】:

      【解决方案2】:

      尝试使用类似的东西

      $ckfile = tempnam ("/", "CURLCOOKIE"); 
      

      这里是示例方法

      <?php
      $ckfile = tempnam ("/", "CURLCOOKIE");
      
      $ch = curl_init ("http://somedomain.com/");
      curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
      $output = curl_exec ($ch);
      
      $ch = curl_init ("http://somedomain.com/cookiepage.php");
      curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
      $output = curl_exec ($ch);
      
      /* here you can do whatever you want with $output */
      ?>
      

      编辑

      class CURL {
      var $callback = false;
      
      function setCallback($func_name) {
      $this->callback = $func_name;
      }
      
      function doRequest($method, $url, $vars) {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_HEADER, 1);
      curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
      curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
      if ($method == 'POST') {
          curl_setopt($ch, CURLOPT_POST, 1);
          curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
      }
      $data = curl_exec($ch);
      curl_close($ch);
      if ($data) {
          if ($this->callback)
          {
              $callback = $this->callback;
              $this->callback = false;
              return call_user_func($callback, $data);
          } else {
              return $data;
          }
      } else {
          return curl_error($ch);
      }
      }
      
      function get($url) {
      return $this->doRequest('GET', $url, 'NULL');
      }
      
      function post($url, $vars) {
      return $this->doRequest('POST', $url, $vars);
      }
      }
      ?>
      

      here得到它

      【讨论】:

      • 感谢您的响应 - CURLCOOKIE 是转到 cookie 还是保存 cookie 的文件名?
      • 还有,用于 cookie 文件的语法是什么。只是“CookieName=CookieValue”吗?
      • 就像 curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');这是 cookie 文件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2023-03-15
      • 2010-11-30
      • 1970-01-01
      • 2014-05-14
      • 2010-09-06
      相关资源
      最近更新 更多