我正在创建一个简单的应用程序,让用户管理他/她的Aeria Games帐户。 我打算用它来为我玩的某个游戏创建一个侧面应用程序。 我的问题是,当我发送请求时,它会发送一个看起来与获取请求版本完全相同的响应(是的,我知道,WEIRD)并且不会更改任何内容(我目前正在尝试更改的电子邮件,但我也是想要进行密码管理(毕竟,什么是没有密码更换器的帐户管理应用程序)。)
这是一个成功的HTTP POST请求,用于更改电子邮件(我使用fiddler捕获浏览器的http请求)。
POST http://www.aeriagames.com/user/92466845/edit/account HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://www.aeriagames.com/user/92466845/edit/account
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Content-Type: multipart/form-data; boundary=---------------------------7dd3e30504ac
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Content-Length: 1589
DNT: 1
Host: www.aeriagames.com
Pragma: no-cache
Cookie: __utmc=71836108; lang=en; __utma=71836108.1752246952.1385652238.1385867504.1385918072.10; __utmz=71836108.1385596659.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); utm_ref=http://www.aeriagames.com/; __utmv=71836108.|1=v_sp=0=1^2=v_age=34=1^3=v_gen=NA=1^4=v_acct=0=1; _gaUniversalX=GA1.2.1752246952.1385652238; __gads=ID=1f31e24ad29d5444:T=1385669247:S=ALNI_MbSMtFcxyx6woFbnCDcXByJCbzrKA; __utmb=71836108.22.9.1385918564155; ag_signup_completed=1; AGESESSID=ed691e273007a36397cb1d3bd4e69f3a; AGESESSID_SIG=NWZkOGMxNjNlYzZkY2Y1OGYwYTY5MzNkNjE3NzM3NTMyZjFhNGZkZnxlZDY5MWUyNzMwMDdhMzYzOTdjYjFkM2JkNGU2OWYzYXwkMmEkMTAkQUdTWG0uNXVydnRtY2NwU3JITWk3ZXdKcXBJdXF5YzFzR1A0NUZlSXZiQy9QYThTUkZ3OWF8OTI0NjY4NDV8dWdnaTAzMXwxMzg1OTE4NTU0; AGESESSID_data=a%3A3%3A%7Bs%3A6%3A%22userid%22%3Bs%3A8%3A%2292466845%22%3Bs%3A11%3A%22autologinid%22%3Bs%3A33%3A%221034996301529b705a714616.82880917%22%3Bs%3A11%3A%22user_active%22%3Bi%3A1%3B%7D; __ar_v4=AF2ADDNNHFDFBJXGZLJI2M%3A20131129%3A17%7CQD7EQLJLZRDDNJQQR47BLX%3A20131129%3A17%7CY25KFQ7YFRFMFIIQ5CUA4W%3A20131129%3A17
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="edit[mail]"
vigudwea@sharklasers.com
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="edit[pass_current_for_mail]"
JX04utgjamezv0
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="edit[pass_current]"
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="edit[pass][pass1]"
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="edit[pass][pass2]"
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="edit[change_email]"
1
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="edit[change_pass]"
0
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="edit[form_token]"
eae5053f2a1ba7844992bdd273d327a9
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="edit[form_id]"
user_edit
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="recaptcha_challenge_field"
03AHJ_Vuskvi0iTL9Xkw8rgXRTSdIUKXau6IN4MnP00MdBMTd5Suzl6Px2fsg0VlDFnSeVEHlYKhwTlSiG5aS6KjorEHzRbS7doFsgCACSL8ZyLWDaEy9-RaPvC5ivxjhrPFCjLXM4YufV8_Ezxuo4pDsnEyn6tvmUJZzCwhGmbOOOZuMmcD9ITTs
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="recaptcha_response_field"
James lmndme
-----------------------------7dd3e30504ac
Content-Disposition: form-data; name="op"
Submit
-----------------------------7dd3e30504ac--
为什么我要留下那封电子邮件并通过那里?电子邮件已再次更改,因此如果您尝试登录该站点将无法正常工作(我不想在出现问题时编辑任何详细信息)。 是的,密码是正确的。
(fiddler不记录来自winsock的http请求/响应,所以我只需要发布该函数的响应)。 在函数发送xx数据之后,它应该使用重定向(在标题中)进行响应,但它不会!...
你可以在这里获得单位: http://pastebin.com/f2EemQjS(AeriaAPI.pas)
http://pastebin.com/VNsj9ZwB(uFunc.pas)
这是用法示例:
Procedure Aeria(user, pass:string);
var
val:String;
a:TAeria;
label
restart1, restart2, restart3;
begin
a := TAeria.Create(user, pass);
if a.Error = INVALID_CAPTCHA then
begin
restart1:
if not GetCaptcha(a) then
begin
Form1.Memo1.Lines.Add('PID 0x' + RandomID + ' exited.');
Exit;
end;
a.ReLogin(user, pass);
if a.Error = INVALID_CAPTCHA then
goto restart1;
end;
if (a.Error = INVALID_CREDENTIALS) then
begin
Form1.Memo1.Lines.Add('Invalid username or password!');
Exit;
end;
Form1.Memo1.Lines.Add('Successfully logged in!');
restart2:
if not( a.GetData() ) then
begin
Form1.Memo1.Lines.Add('an unknown error occured!');
Exit;
end;
if not GetCaptcha(a) then
begin
Form1.Memo1.Lines.Add('Logging out...');
InternetSetCookie('https://www.aeriagames.com/', nil, '');
Form1.Memo1.Lines.Add('Logged out!');
Exit;
end;
if not a.AeriaSetEmail('xjxqkdqu@sharklasers.com') then//sywjozjc@sharklasers.com'
ShowMessage(IntToStr(a.Error));
if a.Error = INVALID_CAPTCHA then
begin
Form1.Memo1.Lines.Add('invalid captcha!');
goto restart2;
end;
if a.Error <> INVALID_NONE then
begin
case a.Error of
INVALID_PASSWORD:
Form1.Memo1.Lines.Add('invalid password!');
INVALID_TOKEN:
goto restart2;
INVALID_COOKIES:
Form1.Memo1.Lines.Add('error: session expired!');
INVALID_CREDENTIALS:
Form1.Memo1.Lines.Add('invalid password or username!');
INVALID_UNKNOWN:
Form1.Memo1.Lines.Add('an unknown error occured!');
end;
Exit;
end;
Form1.Memo1.Lines.Add('Part[1] of [2] Complete.');
restart3:
if not(a.GetData()) then
begin
Form1.Memo1.Lines.Add('an unknown error occured!');
Exit;
end;
if not GetCaptcha(a) then
begin
Form1.Memo1.Lines.Add('Logging out...');
InternetSetCookie('https://www.aeriagames.com', nil, '');
Form1.Memo1.Lines.Add('Logged out!');
Exit;
end;
a.AeriaSetPass('Aefow40tu943kszdfg');
if a.Error = INVALID_CAPTCHA then
goto restart3;
if a.Error <> INVALID_NONE then
begin
case a.Error of
INVALID_PASSWORD:
Form1.Memo1.Lines.Add('invalid password!');
INVALID_TOKEN:
goto restart3;
INVALID_COOKIES:
Form1.Memo1.Lines.Add('error: session expired!');
INVALID_CREDENTIALS:
Form1.Memo1.Lines.Add('invalid password or username!');
INVALID_UNKNOWN:
Form1.Memo1.Lines.Add('an unknown error occured!');
end;
Exit;
end;
Form1.Memo1.Lines.Add('successful.');
end;
该示例将失败,错误代码= 99&amp;然后退出。
您可能会问一些问题: 问题:为什么我使用winsock作为HTTPPostRequest函数? 答:我认为函数的WININET版本是问题,所以我决定使用纯winsock来实现这个功能。
问:我是否调用了WSAStartUp()xD? 答:是的,我有Dx。 问:我正在使用winsock,那么如何检查重定向? 答:我使用showmessage(recvstr);收到标题后,它只响应没有重定向:/ 问:为什么不在表单上删除TWebBrower并让用户更改其传递? 答:为什么不在用户端使流程更简单?我已经解决了这个问题好几天,你们是我最后的希望......我不是要求复制+粘贴,我不想复制+粘贴答案,我只是想有人指点我我搞砸了,所以我可以从错误中吸取教训。
这个项目真的不需要,但是当我真正开始编程作为“工作”时,如果遇到这样的问题怎么办...
答案 0 :(得分:2)
我已经弄明白了! 对于与我有同样问题的人:
&#34;内容类型:multipart / form-data;边界=&#34;标题是边界减去两个破折号(&#34; - &#34;)
例如: 如果您的边界是: ----------------------------- 7dd37b37e06e2 你发送: --------------------------- 7dd37b37e06e2
希望我能帮助别人!我花了整整3天来解决这个问题:(