-2

我使用的是 Delphi XE4,我通常使用 Indy 和 IdHttp.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 函数只是简单的复制和 pos 函数,用于从 GET 响应中提取值)。

我想也许它需要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');

但一切都是徒劳的。

4

1 回答 1

1

我很确定我发布了正确的数据

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

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

  1. 观察参考工作行为。
  2. 观察你的程序行为
  3. 指出不同
  4. 消除差异
  5. 检查程序现在是否工作
  6. 如果不是 - 转到第 2 步。

参考实现将WWW browser与站点一起使用:Opera、Chrome、Firefox、MS IE 等。

  • 观察工具可能是HTTP SnifferWireShark 或 OmniPacket 或 Microsoft Net Monitor 之类的工具,但是这个与操作系统的修补程序在相当深的层次上工作。
  • 或者它可以是带有 GUI 的本地代理,例如 Proxomitron 或 Membrane Monitor——但这需要对程序和浏览器进行特殊设置,以通过该本地代理路由它们的流量。

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

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

于 2013-07-09T13:34:09.110 回答