CURLを使用してクッキーを送信し、戻ってきたクッキーを取得する
2696 ワード
簡単なcurl関数:
この中で重点的に言っているのは2つあります.戻りクッキー を取得するは、返されるbody を取得する.
COOKIEの取得
方法はいくつかありますが、私が一時的に使ったものだけを言います.
CURLOPT_HEADERがtrueに設定されているcurl_execが実行されて戻ってきた内容にはヘッダーが含まれています.クッキーがヘッドに存在することを知っています
戻ってきたクッキーを正規マッチングすることで
このクッキーを保存していつ使うか考えてそのまま使いました
BODYの取得
私のこの取得には限界があります.リクエストのアドレスがjsonに戻ることを知っているからです.この正則は需要に応じて書くことができる.
ネット上でbodyを取得する方法はこうです
しかし、これは効果がないので、最終的に実際のニーズに応じて正則的に一致しました.
COOKIEの使用
クッキーを使うのも簡単
これで相手は$_を使うことができますCOOKIE['X']が値を取得しました
/**
*
* @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つあります.
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']が値を取得しました