2017-10-18 15 views
3

私はCiti Bankの公開API(https://developer.citi.com/)に電話をかけようとしていますが、ユーザーが自分のユーザー名とパスワードでログインできるように画面をスクラップする必要があります。ウェブサイトをスクラップするためのPHPを使用していない

これは、ブラウザにこのURLをパラメータとともに入力するだけで動作します。私はカールと私のPHPコードから同じ呼び出しを試みるとき

https://sandbox.apihub.citi.com/gcb/api/authCode/oauth2/authorize?response_type=code&client_id=<my_client_id>&scope=pay_with_points&countryCode=SG&businessCode=GCB&locale=en_SG&state=12093&redirect_uri=<my_callback> 

しかし、それは私はそれがあるように私のリクエストヘッダを変更しようとしてきた503

<?php 

$header = array(); 
$header[] = 'Upgrade-Insecure-Requests: 1'; 
$header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'; 
$header[] = 'Accept-Encoding: gzip, deflate, br'; 
$header[] = 'Accept-Language: en-US,en;q=0.8,ja;q=0.6,zh-CN;q=0.4,zh;q=0.2,zh-TW;q=0.2,th;q=0.2'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://sandbox.apihub.citi.com/gcb/api/authCode/oauth2/authorize?response_type=code&client_id=<my_client_id>=pay_with_points&countryCode=SG&businessCode=GCB&locale=en_SG&state=12093&redirect_uri=<my_callback_url>'); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_ENCODING, ''); 
curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
$result = curl_exec($ch); 
curl_close ($ch); 
echo $result; 
?> 

のステータスコードを返します。私がブラウザにURLとして入力したかどうかのように見えます。

私はカールで設定する必要があるものを逃しているに違いありません。

誰もが考えているだろうか?ありがとうございました!

+0

'redirect_uri = 'とは何ですか? – madalinivascu

+0

と ''? – madalinivascu

+1

私のコールバックURLです。 Authorize apiは、私がここで述べたもの、例えばhttp://www.myurl.com/bank/hello.phpを呼び出します。 –

答えて

1

問題はhttpsに起因する可能性があります。利用可能なオプションはほとんどありません。

1.あなたは https://curl.haxx.se/ca/cacert.pemファイルをダウンロードし、それを保存し、あなたがそのサイトに行くことによって、ブラウザから証明書をダウンロードして、同じことを行うことができます

curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem"); 

2.このオプションを追加することができます上記のように。証明書が変更され、証明書を確認する必要がある場合は、問題が発生する可能性があります。

3.これはお勧めしませんが、これが実際の問題であるかどうかを確認するために、デバッグの目的で一時的に使用することができます。それはMIMT攻撃を導入します。

//Only use for debugging purposes. 
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
+1

ありがとうKamal。私は、ブラウザで見たときにページがリダイレクトされ、次のページにリダイレクトされる前にクッキーがドロップされることを認識しました。私がクッキーを貼り付けてカールすると、それは機能します。しかし、ページはHTML部分だけを生成します。 JavaScriptを使って書かれた部分は出てこない。私は、おそらくカールはこのための正しい解決策ではないと考えました。私はちょうどページのリダイレクトを完了している必要があります。欠点は、ユーザーが私のclient_idを見ることです。私のclient_idが秘密ではないことが実際に重要であるかどうかを考える必要があります。 –

関連する問題