2012-03-15 7 views
5

Cookieを使用してユーザーを認証するAPIサービスに接続しています。 コマンドプロンプトからこれらの2つのステートメントを作成して動作させます。PHPでCurlを使うときにCookieを読んで、どうやって?

curl -d "u=username&p=password" -c ~/cookiejar https://domain/login 

curl -b https://domain/getData 

今、私はカールを使用して2つの同等のPHPファイルlogin.phpget_data.phpを作りたいです。

私はそれが動作していないget_data.php

login.php

curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 

curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 

を使用しています。 Cookieファイルが作成されていますが、2番目のカールはそれを読み取っていません。 これは正しい方法ですか? Cookieファイルを別々に読んで、ヘッダCookieを設定する必要がありますか?助けていただければ幸いです。ありがとう。

+0

通常、スクリプトがクッキーを読み書きするかどうかにかかわらず、両方のクッキーオプションを設定することをお勧めします。 –

+0

'get_data.php'のcurlリクエストにヘッダ値' Cookie'が自動的に追加されますか? – Diode

+0

その特定のcurlインスタンスが他のスクリプトによって作成されたCookieファイルを読み取ることができる場合は、yesを返します。 –

答えて

14

これはトリックを行います。私は、一例として、Google.comに対してそれを実行します。

<?PHP 

// open a site with cookies 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0'); 
curl_setopt($ch, CURLOPT_HEADER ,1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
$content = curl_exec($ch); 

// get cookies 
$cookies = array(); 
preg_match_all('/Set-Cookie:(?<cookie>\s{0,}.*)$/im', $content, $cookies); 

print_r($cookies['cookie']); // show harvested cookies 

// basic parsing of cookie strings (just an example) 
$cookieParts = array(); 
preg_match_all('/Set-Cookie:\s{0,}(?P<name>[^=]*)=(?P<value>[^;]*).*?expires=(?P<expires>[^;]*).*?path=(?P<path>[^;]*).*?domain=(?P<domain>[^\s;]*).*?$/im', $content, $cookieParts); 
print_r($cookieParts); 

?> 

は効果的な文字列として解析する方法についてはother examplesを参照してください。

1

カールリクエストヘッダーを表示する方法はありますか。私はカールのインスタンスからそれを得ることができますか?またはMac用のフィドラーのようなツールがありますか(私はMac OSを使用しています)?

はい、あなたは次のようにリクエストヘッダを取得することができます:PHPで

<?php 
    ... 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); // enable tracking 
    $result = curl_exec($ch); 
    var_dump(curl_getinfo($ch, CURLINFO_HEADER_OUT)); // request headers 
?> 
0

あなたは今、1行でCookieを取得することができますように見える5.5.0が、私は唯一の空の配列を取り戻しますPHP 7.1.0でこれを使用して:

CURLINFO_COOKIELIST -

既知のすべてのクッキーを取得
$cookies = curl_getinfo($curl, CURLINFO_COOKIELIST); 
+0

私はこれらの問題も解決していますか?CURLINFO_COOKIELISTがクッキーを出力するようになっていますか?私にとってはうまくいっていましたが、 'yum update -y'を使って最近更新したとき、結果は常に空でした。 – maddo7

+0

最初のリクエストで 'curl_setopt($ ch、CURLOPT_COOKIELIST、array( ''));を設定しようとします。これは私のためにそれを解決しました。 – maddo7

関連する問題