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