2016-08-30 16 views
0

私は、Appleのユーザーにとって使いやすいものを作るためのスクリプトを作ろうとしていますが、今はそれを公開したくはありませんが、データの投稿がPHPのCurlで機能していない

  1. アップルにログインしてクッキーを保存してください。
  2. リンゴから保存されたクッキーを使用してデータを取得しています。
  3. 自動化ツールの作成。

私はjsonヘッダーを提出する必要があるため、最初のステップでは固まっていますが、Curlはカスタムヘッダーを送信していません。ここで

は私のコードです:

<?php 
function login($url,$data){ 
    $data=json_encode($data); 
    $login = curl_init(); 
    curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt"); 
    curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt"); 
    curl_setopt($login, CURLOPT_NOBODY, false); 
    curl_setopt($login, CURLOPT_HEADER, false); 
    curl_setopt($login, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($login, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($login, CURLOPT_TIMEOUT, 40000); 
    curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($login, CURLOPT_URL, $url); 
    curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
    curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($login, CURLOPT_POST, TRUE); 
    curl_setopt($login, CURLOPT_POST, 1); 
    curl_setopt($login, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data))                  
);  
    curl_setopt($login, CURLOPT_POSTFIELDS, $data); 
    //ob_start(); 
    $rez=curl_exec ($login); 
}     

$data = array("accountName" => "[email protected]", "password" => "MyPassWord","rememberMe" => "true"); 
$url="https://idmsa.apple.com/appleauth/auth/signin";  
login($url,$data); 
?> 

私がリクエストを送信する際、データを改ざんしようとするたびに、それはこれがコメントとして管理不能になるカスタムヘッダー

+0

をステータスを取得することができますどのようにヘッダの有無をチェックしますか? (どのようにそれらが送信されていないことを知っていますか) – BeetleJuice

+0

私は改ざんデータ、FireFox拡張機能、HTTPFoxを使ってGETかPOSTかを確認しています。 – YAK

+0

私の言うことです:あなたのコードはあなたのサーバーからAppleに向かうリクエストを開始します。では、ブラウザはあなたのサーバーとAppleサーバー間のトラフィックをどのように見ることができますか?ブラウザから取得する情報は、ブラウザとサーバー間のトラフィックに関するものです。 'GET'は、ブラウザがサーバーからページを取得するために使用したメソッドです。必ずしもcURLがAppleを呼び出すメソッドである必要はありません。これは、どのようにヘッダがcURLによって送信されるかを教えてくれるかを尋ねる理由です。 – BeetleJuice

答えて

0

を示していないので、ここでどのように決してI線に何が起こるのかsee

 $verbiage = null; 
     if ($this->verbose) { 
      curl_setopt($ch , CURLINFO_HEADER_OUT , false); 
      curl_setopt($ch , CURLOPT_VERBOSE , true); 
      $verbiage = fopen('php://temp' , 'w+'); 
      curl_setopt($ch , CURLOPT_STDERR , $verbiage); 
     } 

     $resp = curl_exec($ch); 

     if ($this->verbose) { 
      rewind($verbiage); 
      $verboseLog = stream_get_contents($verbiage); 
      $log->info("Verbose information:\n$verboseLog"); 
      fclose($verbiage); 
     } 


     curl_close($ch); 

$ログがlog4phpオブジェクトであり、あなたがあなたのDISを選びますメソッドを再生する。この「トレース」オプションでサンプルログを追加

EDITは私のcURLセッションがリモートピアから受信しているものに対応<とライン

INFO - testCreateLabRequest starts. 
TRACE - Query for lab request [dispensary[1]inboundLabRequest[2]ForPatient[1]] returned no records for feed [toubibCreamedFeedGuid] 
DEBUG - Sending json 
{ *redacted* , "trackingId":"5ac4473b-407f-4d7d-83eb-1a3f9abe5b8b"} 

INFO - Verbose information: 
* Trying fe80::3636:3bff:fecf:804c... 
* Connected to darkmax.local (fe80::3636:3bff:fecf:804c) port 80 (#0) 
> POST /ehr/feed/lab/request HTTP/1.1 
Host: darkmax.local 
Protocol_version : 1.1 
Connection: Close 
Content-Type: application/json ; charset=utf-8 
Proxy-Connection: Close 
User-Agent: Portable EHR(106) 
Accept: application/json, text/html; 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Content-Length: 851 

* upload completely sent off: 851 out of 851 bytes 
< HTTP/1.1 200 OK 
< Date: Wed, 31 Aug 2016 02:04:03 GMT 
< Server: Apachee/2.4.12 
< Access-Control-Allow-Origin: * 
< Origin: http://darkmax.local 
< Connection: close 
< Transfer-Encoding: chunked 
< Content-Type: application/json; charset=utf-8 
< 
* Closing connection 0 

を可能にしました。 me-to-peer-back-to-meから飛ぶ実際のHTTPプロトコルを見ていると、何度か根本的な問題の性質がわかってきました。

+0

これは正確に何をすべきか私に説明してもらえますか? – YAK

+0

私はあなたにオプションを与えようとしていました、あなたの質問を誤解しているかもしれません。これにより、ピア(リンゴ)との接続状態、具体的にはリモートからの接続先の詳細が表示されます。私はこれを使って例を追加しました。私はあなたが問題の本質についてそこにヒントを見つけることができることを願った。 – YvesLeBorg

0

AppleはX-Apple-Widget-KeyのようにCSRFを使用します。私はあなたがそれをキャッチする必要があると思う。 source codeで見つけることができます。あなたが..... curl_getinfo()

enter image description here //あなたのコードを使用して

curl_setopt($login, CURLOPT_POSTFIELDS, $data); 
//ob_start(); 
$rez = curl_exec($login); 
$status = curl_getinfo($login); 

print_r($status); 
+0

これは、配列の芽としてのカールオプションを示しています... – YAK

+0

@ヤク、 'curl_setopt($ login、CURLOPT_HEADER、false);'をtrueに変更してください。 'curl_getinfo'によって、オプションではなく返されたヘッダを受け取らなければなりません。 –

+0

'Array([url] => https://idmsa.apple.com/appleauth/auth/signin [content_type] => text/html; charset = UTF-8 [http_code] => 200 [header_size] => 1558 = [0] [total_time] => 0.919805 [namelookup_time] => 0.060495 [connect_time] => 0.214772 [pretransfer_time] => 0.55338 [ssl_verify_result] => size_upload] => 76 [size_download] => 20911 [speed_download] => 22734 [speed_upload] => 82 [download_content_length] => -1 [upload_content_length] => 76 [starttransfer_time] => 0.769499 [redirect_time] => 0 [redirect_url] => ' – YAK

関連する問題