2

cURL でのリクエストに問題があります。

ログインしたいのですが、うまくいきます。接続を利用できるようにするために Cookie を保存したいのですが、うまくいきます。

$lien = 'https://thewebsite.com';
$postfields = array(
    'username' => 'test123',
    'password' => 'test123'
);

$path_cookie = 'connexion.txt';
if (!file_exists(realpath($path_cookie))) touch($path_cookie);

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $lien);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($curl, CURLOPT_COOKIEJAR, realpath($path_cookie));

$return = curl_exec($curl);

echo($return);
curl_close($curl);

後半:

$lien2 = 'https://thewebsite.com/myaccount';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $lien2);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($curl, CURLOPT_COOKIEFILE, realpath($path_cookie));

$return = curl_exec($curl); 

echo realpath($path_cookie);
curl_close($curl);

しかし、他のリクエストをしたいときはうまくいきません。出力は次のとおりです。

オブジェクトはここに移動しました。

ログインのページはこちら( https://thewebsite.com ) ...

そのため、接続が利用できず、2 番目の curl コマンドを実行しようとするとサーバーが追い出されました。

誰でも私を助けてくれますか?

最初のリクエストが 2 番目のリクエストの前に完了していない可能性があります。2 つのリクエストの間で一時停止するにはどうすればよいですか? (睡眠がうまくいかない)

4

1 に答える 1

2

PHPドキュメントから取得:

CURLOPT_COOKIESESSION:

これを新しい Cookie「セッション」としてマークする場合は TRUE。これにより、libcurl は、ロードしようとしているすべての Cookie (前のセッションからの「セッション Cookie」) を無視するように強制されます。デフォルトでは、セッション Cookie であるかどうかに関係なく、libcurl は常にすべての Cookie を保存してロードします。セッション Cookie は、有効期限のない Cookie であり、この「セッション」の間だけ存続し、存在することを意図しています。

つまり、コードCURLOPT_COOKIESESSIONから削除するsecond partと、コードが機能するはずです。

于 2013-06-18T20:09:33.347 に答える