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

时间:2013-07-09 11:01:16

标签: delphi post cookies indy delphi-xe4

我正在使用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');

但都是徒劳的。

1 个答案:

答案 0 :(得分:1)

  

我非常确定我正在发布正确的数据

因为它不起作用 - 显然你没有(或者Delphi没有 - 这对服务器没有任何影响)。

你应该开始通常的调试循环:

  1. 观察参考工作行为。
  2. 观察您的计划行为
  3. 发现差异
  4. 消除差异
  5. 检查程序现在是否有效
  6. 如果不是 - 请转到第2步。
  7. 参考实施将是与网站合作的一些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理论和工作浏览器实践相结合。