2012-02-13 16 views
0

OS X Lionを実行しているMacでMAMPを使用しています。CURLOPT_COOKIEFILEがCookieヘッダーを追加しない

クッキーを送信するリモートサイトに接続する必要があります。 クッキー部分を除いてすべてがうまくいっています。 クッキーの部分については、私はこのコードを使用しています:

$cookieFile = dirname(__FILE__).'/cookie.txt'; 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); 

CURLOPT_COOKIEJAR部分がなく、後続の要求CURLOPT_COOKIEFILEに、クッキーを作成し、クッキーヘッダーを追加しません。 HTTPScoop(Fiddlerのようなツール)を使ってこれをチェックしました。

問題が何であるか任意のアイデア?

EDIT: ImはASP.Netサイトに接続しています。問題は、ASP.NET_SessionId Cookieを取得していないようです。私が得たクッキーには価値のない鍵があるので、それがなぜ投稿されないのかが分かります。 サーバーにセッションCookieを送信させるにはどうすればよいですか?

+0

'CURLOPT_COOKIEJARの部分はクッキーを作成します - 作成したファイルに実際にクッキー値があり、空ではないことを確認しましたか?最初のリクエストのレスポンスヘッダから 'Set-Cookie'ヘッダが存在することを確認できますか? – drew010

+0

チェックすると、Cookieが作成され、コンテンツにはヘッダーの値が反映されます。 – Arnoldiusss

+0

私は少し損失があります。より完全なコードを投稿したいと思いますか、アクセスしようとしているサイトのURLを試してみることができますか? – drew010

答えて

1

もっとコードを見る必要がありますが、最初のリクエストからセッションクッキーを収集し、その後のPOSTで使用するサンプルビットがあります。それは匿名プロキシを使用して任意のURLでGETリクエストを実行します。(COOKIEJARは使用していませんが、明らかに役立ちますが、まだ役立つと感じています)。

<?php 
define('TARGET_URL', 'http://moxune.com'); 
echo 'Sending initial request' . PHP_EOL; 
$aHeaders = get_headers("http://420proxy.info"); 

foreach($aHeaders as $sHeader) { 
    if(stripos($sHeader, 'set-cookie') !== false) { 
     // extract the cookie from the first response 
     $aCookie = explode(':', $sHeader); 
     $sCookie = trim(array_pop($aCookie)); 
     $oCookie = http_parse_cookie($sCookie); 

     echo 'Cookie extracted, trying to POST now' . PHP_EOL; 

     // OK, now let's try the POST request 
     $ch = curl_init('http://420proxy.info/includes/process.php?action=update'); 
     curl_setopt($ch, CURLOPT_REFERER, '420.proxy.info'); 
     curl_setopt($ch, CURLOPT_POST, true); 
     curl_setopt($ch, CURLOPT_COOKIE, $sCookie); 
     curl_setopt($ch, CURLOPT_HEADER, true); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

     curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: 100-continue')); 

     //curl_setopt($ch, CURLOPT_COOKIE, http_build_cookie((array)$oCookie)); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, array(
      'u' => TARGET_URL, 
      'allowCookies' => 'off', 
      'encodeURL' => 'off', 
      'stripJS' => 'on' 
      ) 
     ); 

     $response = curl_exec($ch); 

     die(var_dump($response)); 
    } 
} 
+0

役立つコード、ややこ。私の問題は、ログイン要求の投稿された値を正確に模倣しなかったことです。満たされたセッションCookieが設定され、後続の投稿に投稿されたことを修正した後。 – Arnoldiusss

+0

あなたはそれが働いていると聞いて良いです。 – quickshiftin

関連する問題