WWW服务器在Delphi中Internet Direct组件发出POST请求后报告错误



我使用的是Delphi XE4,我通常使用带有IdHttp.POST的Indy来向网站、发出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函数只是从GET响应中提取值的简单复制和pos函数)。

我想它可能需要cookie,所以我在一开始就添加了这个:

  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');

但这一切都是徒劳的。

我确信我正在张贴正确的数据

由于它不起作用——显然您不起作用(或者Delphi不起作用,这对服务器来说没有什么区别)。

您应该启动通常的调试循环:

  1. 遵守参考工作行为
  2. 观察您的程序行为
  3. 发现差异
  4. 消除差异
  5. 检查程序现在是否工作
  6. 如果没有,请转至步骤2

参考实现将是一些与网站合作的WWW browser:Opera、Chrome、Firefox、MS IE等。

  • 观察工具可能是一些HTTP Sniffer,如WireShark、OmniPacket、Microsoft Net Monitor或其他,但这会在相当深层次上对操作系统进行修补
  • 或者,它可以是带有GUI的本地代理,如Proxomitron或Membrane Monitor,但这需要对程序和浏览器进行特殊设置,才能通过该本地代理路由流量

然后,你应该阅读有关HTTP的内容,从维基百科的浅层观察开始,然后打开相关的RFC文档(HTTP协议不同部分的规范),这样你就会了解观察到的差异意味着什么以及如何修复它们。例如,许多人在实际应该使用GET请求之类的请求时使用POST请求。

您想调试HTTP程序,但对于此HTTP日志,workign和borken是必需的,而您的问题缺少它们。更重要的是,您很可能可以自己修复它,只需将程序的HTTP日志与RFC理论和工作浏览器实践相一致即可。

最新更新