我正在使用Delphi XE4,我通常使用Indy和IdHttp.POST向网站发送POST请求,
这次,每当我尝试发布请求时,我都会Error: Your browser is not sending the correct data.
我非常确定我正在发布正确的数据,而我正在使用IOHandler和CookieManager。
已经处理了好几天(字面意思)
以下是代码(代码中的网站):
procedure TForm1.Button1Click(Sender: TObject);
var s, lge, Kf1, Kf2, Kf3, Kf4 : String;
lParam : TStringList;
begin
S := http.Get('https://www.neobux.com/m/l/');
Memo1.Lines.Add(S);
getParamLge(s,lge,'lge');
GetInput(s,Kf1,'id="Kf1"');
GetInput(s,Kf2,'id="Kf2"');
GetInput(s,Kf3,'id="Kf3"');
GetInput(s,Kf4,'id="Kf4"');
lParam := TStringList.Create;
lParam.Add('lge='+lge);
lParam.Add(Kf1+'=USERNAME');
lParam.Add(Kf2+'=PASSWORD');
lParam.Add(Kf3+'=');
lParam.Add(Kf4+'=');
lParam.Add('login=1');
memo1.Lines.Add(http.Post('https://www.neobux.com/m/l/', lParam));
end;
(getParamLge和GetInput函数,只是简单的copy和pos函数,用于从GET respone中提取值)。
我想也许它需要饼干所以我在开头添加了这个:
Cookie.CookieCollection.Clear;
Cookie.CookieCollection.AddClientCookies('CFID=21531887; CFTOKEN=20369251; dh=20130709111845,1920x1080,{ts ''2013-07-09 06:18:58''}; __utma=90161412.436822896.1373368451.1373368451.1373368451.1; __utmb=90161412.11.10.1373368451; __utmc=90161412; __utmz=90161412.1373368451.1.1.'+'utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __asc=06ff77ad13fc32381fd1f5d6405; __auc=06ff77ad13fc32381fd1f5d6405; __atuvc=4%7C28; MS=flat');
但都是徒劳的。
答案 0 :(得分:1)
我非常确定我正在发布正确的数据
因为它不起作用 - 显然你没有(或者Delphi没有 - 这对服务器没有任何影响)。
你应该开始通常的调试循环:
参考实施将是与网站合作的一些WWW browser
:Opera,Chrome,Firefox,MS IE等。
HTTP Sniffer
,如WireShark或OmniPacket或Microsoft Net Monitor,或者这些操作系统的操作工具的工作范围相当深。然后你应该阅读HTTP,从维基百科的浅层观察开始,然后打开相关的RFC文档(HTTP协议的不同部分的规范),这样你就可以理解观察到的差异意味着什么以及如何解决它们。例如,许多人在实际应该使用GET请求时使用POST请求。
您想要调试HTTP程序,但是对于此HTTP日志,workign和borken是必需的,并且您的问题缺乏。更重要的是,很可能你可以自己修复它,只需将你的程序的HTTP日志与RFC理论和工作浏览器实践相结合。