2017-09-26 18 views
1

私はcURLコマンドを使用してウェブサイトを認証し、それに応答してクッキーを与えた後、このクッキーを使用してREST APIここでは、このサービスPHP - cURLを使用してリダイレクトURLからクッキーを取得しても応答が得られない

への呼び出し作業curlコマンドです:

curl -v -l -H "Content-Type: application/x-www-form-urlencoded" -H "Referrer:https://mywebsiteurl.com?ticket=unique_ticket_id" -d "_charset_=UTF-8&errorMessage=User+name+and+password+do+not+match&resource=%2F&username=username%40domain.com&password=XXXXXX&nextpage=welcomeCM.jsp&viewInfo=&ticket=unique_ticket_id" -X POST https://mywebsiteurl.com/index.jsp 

上記のコマンドチケットパラメータが今ウェブサイトのURL

と一緒に渡されたユニークなチケットIDが含まれていて、私はよcURL PHPを使用して同じことを達成しようとすると、ここにありますPHPコード:string(0) ""何も私はcurl_getinfoを試して、コメントを追加し、この後$response

に返さないなっていることを意味する:

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "https://mywebsiteurl.com/index.jsp"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "_charset_=UTF-8&errorMessage=User+name+and+password+do+not+match&resource=%2F&username=username%40domain.com&password=XXXXXX&nextpage=welcomeCM.jsp&viewInfo=&ticket=unique_ticket_id"); 
curl_setopt($ch, CURLOPT_POST, 1); 

$headers = array(
     'Content-Type: application/x-www-form-urlencoded', 
     'Referrer: https://mywebsiteurl.com?ticket=unique_ticket_id' 
     ); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$result = curl_exec($ch); 
if (curl_errno($ch)) { 
    echo 'Error:' . curl_error($ch); 
} 

echo $result; 

curl_close ($ch); 

ここecho $resultが、私はその後、var_dump($result);を試してみました、それは、この出力を与えるもの

を示していませんコード:

echo "<pre>"; 
$info = curl_getinfo($ch); 
print_r($info); 
echo "</pre>"; 

これは私に与えられた次の配列:

Array 
(
    [url] => https://mywebsiteurl.com/index.jsp 
    [content_type] => text/html;charset=UTF-8 
    [http_code] => 302 
    [header_size] => 1306 
    [request_size] => 619 
    [filetime] => -1 
    [ssl_verify_result] => 0 
    [redirect_count] => 0 
    [total_time] => 1.540687 
    [namelookup_time] => 0.028262 
    [connect_time] => 0.171774 
    [pretransfer_time] => 0.462507 
    [size_upload] => 280 
    [size_download] => 0 
    [speed_download] => 0 
    [speed_upload] => 181 
    [download_content_length] => 0 
    [upload_content_length] => 280 
    [starttransfer_time] => 1.54066 
    [redirect_time] => 0 
    [redirect_url] => https://mywebsiteurl.com/[email protected]&locale=en_US 
    [primary_ip] => YY.YYY.YYY.YY 
    [certinfo] => Array 
     (
     ) 

    [primary_port] => 443 
    [local_ip] => XX.XX.XXX.XX 
    [local_port] => 47692 
) 

は今、私の目標は$resultでクッキーを取得することですが、&何も

は何かがcurlコマンド同等のPHPコードに欠落していること、それです、それに返されません取得された空であります?

誰かがクッキーに

おかげで多くを取得する方向で&ポイント私を私を助けてください!

UPDATE

私はecho $result/Dashboard?viewInfo=に私の現在のローカルのWebページをリダイレクトされ、それが成功したログイン

しかし、cURLの実行後のこの時間の後に302リダイレクトをたどる持つように要求にcurl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);を追加しましたstring(1462) " "

:明らかにこの時間 var_dump($result);が結果としてされても

存在しません。

そしてcurl_getinfo($ch)この時間は、次の配列を与えている:

Array 
(
    [url] => https://mywebsiteurl.com/[email protected]&locale=en_US 
    [content_type] => text/html;charset=UTF-8 
    [http_code] => 200 
    [header_size] => 1821 
    [request_size] => 956 
    [filetime] => -1 
    [ssl_verify_result] => 0 
    [redirect_count] => 1 
    [total_time] => 1.746911 
    [namelookup_time] => 1.5E-5 
    [connect_time] => 1.5E-5 
    [pretransfer_time] => 6.2E-5 
    [size_upload] => 0 
    [size_download] => 1462 
    [speed_download] => 836 
    [speed_upload] => 0 
    [download_content_length] => 1462 
    [upload_content_length] => 0 
    [starttransfer_time] => 0.146587 
    [redirect_time] => 1.6003 
    [redirect_url] => 
    [primary_ip] => YY.YYY.YYY.YY 
    [certinfo] => Array 
     (
     ) 

    [primary_port] => 443 
    [local_ip] => YY.YY.YYY.YY 
    [local_port] => 47705 
) 

はまだここに必要なCookieを取得することはできません、 助けてください!

+0

おそらくあなたの問題を解決するが、知っておく価値ありませんワンノート:「参照元」のスペルが間違っている、それは「リファラー」でなければなりません(はい、それは間違った英語の綴りだが、それはそれはHTTPであるだけ方法です)。 –

+0

ログインに成功した後、 '' curl_setopt($ ch、CURLOPT_FOLLOWLOCATION、1); 'を302リダイレクトに従わせる要求に追加する必要があります。 – drew010

+0

@HaydenSchiff 本当に間違っていますが、これはスペルミスです。これはHTTPでの方法です:) – dreamcoder007

答えて

0

与えられたカール機能を使用する場合は、CURLOPT_COOKIEJAR/CURLOPT_COOKIEFILEを使用してCookieを保存して取得できます。これはファイルベースの場合です。 この場合、curlはCookie関連の情報をファイルに書き込みます。

このファイルの場所を定義できます。

CURLOPT_COOKIEJARを使用すると、cookieデータを取得することをcurlに伝えます。

// create cookie file 
$cookie = __DIR__ . "/where/you/want/to/store/your/cookie/mycookie.txt"; 
fopen($cookie, "w"); 
// you may want to use some random identicator in your cookie file 
// to make sure it does not get overwritten by some action 

// prepare login 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://mywebsiteurl.com/index.jsp"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
// tell curl to follow redirects 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURlOPT_POSTFIELDS, "username=usernam&password=XXXXXX"); 
curl_setopt($ch, CURLOPT_POST, 1); 
// set a jar, to store your cookie 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
$headers = array(
     'Content-Type: application/x-www-form-urlencoded', 
     'Referrer: https://mywebsiteurl.com?ticket=unique_ticket_id' 
     ); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
// do login 
$loginResult = curl_exec($ch); 

// check if your login has worked according to the given result by any method you want 
if (preg_match("/Welcome/", $loginResult)) { 
    // simple regex for demonstration purpose 
} 

// now you could load your cookie out of the file, or just use the file for future requests 

ログインが成功した場合は、すべての情報がCookieファイルに保存されます。

今度は、そのクッキーを今後のリクエスト用にCURLOPT_COOKIEFILEというカルトで再度使用することができます。

// do other request, with your cookie 
curl_setopt($ch, CURLOPT_URL, "https://mywebsiteurl.com/api/rest.php"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "your new post data"); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
// set a jar to update your cookie if needed 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
// give curl the location of your cookie file, so it can send it 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); 
+0

あなたの応答に感謝します! 私はCURLOPT_COOKIEJARを試してみました。 しかし、このコードで.phpページを実行すると、ログインするのではなく、https://mywebsiteurl.com/index.jspのログインページが表示されます。これで、コードはWebサイトからログインページを奪ったようです。それを表示しました。 まだ必要なCookieを取得できませんでした – dreamcoder007

関連する問題