CURLを使用してクッキーを送信し、戻ってきたクッキーを取得する

2696 ワード

簡単なcurl関数:
/**
 *     
 * @param String $url          
 * @param Array  $header      header  
								 $header = array('x:y','language:zh','region:GZ');
 * @param Array  $content POST   
								 $content = array('name' => 'wumian');
 * @param Array  $backHeader         header
								0    1  
 * @param Array  $cookie    cookie
 * @return String
 */
function tocurl($url, $header, $content=array(),$backHeader=0,$cookie=''){
    $ch = curl_init();
    if(substr($url,0,5)=='https'){
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //       
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  //       SSL        
    }
    if(!isset($header[0])){//           
      foreach($header as $hk=>$hv){
         unset($header[$hk]);
         $header[]=$hk.':'.$hv;
      }
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_POST, true);
    if(count($content)){
      curl_setopt($ch, CURLOPT_POSTFIELDS,$content);
    }
    if(!empty($cookie)){
        curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    }
    curl_setopt($ch, CURLOPT_HEADER,$backHeader); //      Header    
    $response = curl_exec($ch);
    if($error=curl_error($ch)){
        die($error);
    }
    curl_close($ch);
    return $response;
}

この中で重点的に言っているのは2つあります.
  • 戻りクッキー
  • を取得する
  • は、返されるbody
  • を取得する.
    COOKIEの取得
    方法はいくつかありますが、私が一時的に使ったものだけを言います.
    CURLOPT_HEADERがtrueに設定されているcurl_execが実行されて戻ってきた内容にはヘッダーが含まれています.クッキーがヘッドに存在することを知っています
    戻ってきたクッキーを正規マッチングすることで
    $r = tocurl('https://www.x.com/index.php?act=account&op=send_code','',$send,1);
    $preg_cookie = '/Set-Cookie: (.*?);/m';
    if(preg_match_all($preg_cookie,$r,$cookie)){
        $cookie = implode(';', $cookie['1']);
    }
    //$cookie           : x=1;y=2;    x,y cookie     1   2  

    このクッキーを保存していつ使うか考えてそのまま使いました
    BODYの取得
    $r = tocurl('https://www.X.com/index.php?act=account&op=send_code','',$send,1);
    $preg_json = '/{(.*?)}/m';
    if(preg_match($preg_json,$r,$json)){
        $json = $json['0'];
    }

    私のこの取得には限界があります.リクエストのアドレスがjsonに戻ることを知っているからです.この正則は需要に応じて書くことができる.
    ネット上でbodyを取得する方法はこうです
     list($header, $body) = explode("\r
    \r
    ", $r, 2);

    しかし、これは効果がないので、最終的に実際のニーズに応じて正則的に一致しました.
    COOKIEの使用
    クッキーを使うのも簡単
     curl_setopt($ch, CURLOPT_COOKIE, $cookie);//$cookie   x=1;y=2

    これで相手は$_を使うことができますCOOKIE['X']が値を取得しました