我想用C#以编程方式登录亚马逊卖家.我不想使用Amazon Web Services.
这是我到目前为止所做的:
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 Cookie 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响应.
我的目标是登录,然后在卖家中心的库存中搜索一些产品.如何做到这一点并将会话和cookie保留在我将要做的其他网络请求上?
他们[亚马逊]在页面上有很多Javascripts.这些脚本的全部目的似乎是为了防止人们做你想做的事情.
操纵表单数据并调用各种其他页面资源.然后,亚马逊使用其他资产调用和操纵数据来确定请求是来自合法浏览器还是试图模拟浏览器的内容.
这是一种安全措施,可以阻止卖家账户进行暴力破解攻击等.
JS片段是故意混淆的,以防止您轻松地对它们进行逆向工程,但当您应用知识,耐心和坚韧时,当然没有什么是不可能的.
如果你想追求这个,那么我建议在页面上对JS进行逆向工程,然后在代码处理表单值等的情况下模拟这些部分,并模拟其他资产调用以及相对时序流.注意在图像或远程脚本标题中秘密设置的cookie,并确保您的脚本的cookie jar始终正常运行.
这些反仿真技术经常用于防止僵尸网络模仿PPC网络上的点击.它们不是万无一失的,也不是牢不可破的,但它需要相当长的时间才能使它运转起来.
老实说,如果您对他们提供的C#库的编程风格或功能不满意,那么您最好构建自己的库以利用亚马逊商城网络服务.
从长远来看,你将拥有一个更加稳定的工具包,不需要定期更新.