2011-07-31 8 views
4

C#でプログラム的に中央のAmazonの売り手にログインしたいのですが。私はAmazon Web Servicesを使用したくありません。ここでC#でAmazonでログインしてください

は、私がこれまでにやっていることです:

private void button1_Click(object sender, EventArgs e) 
{ 
    string appURL = "https://sellercentral.amazon.com/gp/sign-in/sign-in.html/ref=xx_login_lgin_home"; 
    string strPostData = "protocol=https&action=sign-in&email=test%40gmail.com&destination=https%3A%2F%2Fsellercentral.amazon.com%2Fgp%2Fhomepage.html%3Fie%3DUTF8%26%252AVersion%252A%3D1%26%252Aentries%252A%3D0&optin=1&ouid=01&password=ntest&sign-in-button=&metadata1=SIsVVcIUMA1uElSK%2BySsVuCX1YuhcTji35ShGdQ%2Fd4ipBgkh6qW6HcPfyVu4dbOFdZiErWz%2F9OumR%2FfeVnrNSUUSEkIokrMPxYFPtZTlfJc44D8hWHpewjOs5TF4NIDyehvkc5eHJ8GsDbiUSdBtOq4iBnIpkIpAodIzIVFHK%2FQJJICA9n%2F8abB4XfwODJrI7YSa1gwCMrJbh0wvpAW5%2B%2BHecdjA5Bin8slkBqj9LQG%2FfSrTXlAGPsW21qV2ba4kej5xdjytVTELVqnLPB9Fc1Z%2FR98qDpBkQ%2F2lM3EV4POoe0nsAMALomqvOhOkIInqp14Ic%2BxJU35hX89rIhmSQMpL1WtMGE%2F9A2ebmHV%2BzlW0tUZIfxyupg2MiNJIeg1uNqBhBT8duYyKp0n3d5gYOnhxYCQTqR297AV%2FDAdHSlbrJRT5HX9spg9RyHSTDLiGvhy1BaK0LIzvR%2Bj786i4Z%2FCGBpb31XcXrFx9uDe8rxtNRLFiDXqxUCCf8hTBEhtyYriB2%2FlZAvoIRyAZMLDYykncALiRVPOWkQX%2FQjZUu6M6bBfqaQ6ODQlbc0j9V2FZ%2BEQng456mQmUOoO5"; 

    // Setup the HTTP request. 
    HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(appURL); 
    objWebRequest.Method = "POST"; 
    objWebRequest.AllowAutoRedirect = true; 
    objWebRequest.CookieContainer = new CookieContainer(); //Enable Coolkie 
    objWebRequest.ContentLength = strPostData.Length; 
    objWebRequest.ContentType = "application/x-www-form-urlencoded"; 
    objWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"; 

    // Post to the login form. 
    StreamWriter swRequestWriter = new 
     StreamWriter(objWebRequest.GetRequestStream()); 
    swRequestWriter.Write(strPostData); 
    swRequestWriter.Close(); 

    // Get the response. 
    HttpWebResponse objWebResponse = 
     (HttpWebResponse)objWebRequest.GetResponse(); 

    // Read the response 
    StreamReader srResponseReader = new 
     StreamReader(objWebResponse.GetResponseStream()); 
    string strResponseData = srResponseReader.ReadToEnd(); 
    srResponseReader.Close(); 

    // Display the response. 
    webBrowser1.DocumentText = strResponseData; 
} 

}

私はそれを実行すると、私は、ログインページ応答として取得し、ログインしていない...なぜ?私が間違っていることは何ですか?私は、Webブラウザのhtml応答を表示するために使用します。

私の目標は、ログインして、売り手中央の在庫にある商品を検索することです。どのようにこれを行い、セッションやクッキーを他のWebリクエストで保持するのですか?

+0

Well amazon *おそらくAWSを使用したいと思っています。 –

+0

このアプローチには、Seller Centralとそのさまざまなコンポーネントが毎週または隔週で変更されるので、私はアドバイスします。変更率に追いつくことは難しいでしょう(これは、HTMLとJavaScriptの束を月に数回リバースエンジニアリングする必要があることを意味します)。 – fmr

答えて

4

[Amazon]ページに多数のJavascriptがあります。これらのスクリプトの全目的は、あなたがしようとしていることを人々がやってしまうのを防ぐことにあるようです。

フォームデータを操作し、他のさまざまなページアセットを呼び出します。 Amazonはこれらの他の資産の呼び出しと操作されたデータを使用して、要求が正当なブラウザかブラウザをエミュレートしようとしているものかを判断します。

それはJSスニペットは、意図的にそれらを簡単にリバースエンジニアリングすることを防ぐために難読化されている

ブルートフォースハッキング攻撃が可能な販売者のアカウントを停止するためのセキュリティ対策、などだが、もちろん何もする場合は不可能ではありませんあなたは知識、忍耐と強靭さを適用します。

これを実行したいのであれば、ページ上でJSをリバースエンジニアリングしてから、コードがフォーム値などで何をエミュレートするのか、他のアセットコールをエミュレートして相対タイミングフロー。イメージまたはリモートスクリプトヘッダーに秘密に設定されているCookieに注意し、スクリプトのCookie jarが常に適切に動作するようにします。

これらのアンチエミュレーション技術は、ボットネットワークがPPCネットワーク上でクリックをエミュレートするのを防ぐために定期的に使用されます。彼らは偽証でも破られもしませんが、それを働かせるにはかなりの時間がかかります。

正直なところ、C#ライブラリのプログラミングスタイルや機能に満足できない場合は、AmazonマーケットプレイスWebサービスを利用するために独自のライブラリを構築することをおすすめします。

長期的には、定期的に更新する必要がない、はるかに安定したツールキットがあります。

関連する問題