我现在做一个东西用了indy 10 的idhttp实现模拟登陆某个网站,采用POST数据的方式但是POST成功后不能返回数据(HandleRedirects已经是true了)于是用Sniffer分析
先正常在网站中登陆,发现POST后receive数据中有个Location,这个就是登陆成功后的重新定向的地址而再分析我的idhttp POST后发现Location为'http:',显然是无法得到返回的数据这个如何解决,我在网上看到有个OnRedirect事件里的有个des是重新定向的地址,但是我的IDHTTP是在线程里动态创建的如何能执行OnRedirect,还有,我在线程里创建IDHTTP后发现线程中如果idhttp出错,就无法挂起(suspend)我希望的是idhttp1.post(url,Postdata,PostBackData);memo1.text:=PostBackData;无论POST成功还是失败都能在memo1中显示返回的数据,我现在是失败有返回数据,但是成功的话会有重新定向,PostBackData就收不到数据了!哪个高人能够解答我的问题?谢谢了!
   

解决方案 »

  1.   

    重定向可以用idhttp1.Request.Referer:=抓包看一下referer的url应该就可以自动创建的idhttp也可以响应事件,你按照事件的规范写一个过程,然后在线程里面赋值给idhttp的事件就可以了。另外说一句……应该是memo1.text:=PostBackData.datastring;吧?
      

  2.   

    是的,写错了但是又看了下post的header和内容中没有任何关于referer的信息,这个在服务端是不判断的但是能不能详细地说一下如何在自定义IDHTTP中响应这个IDHTTP的事件假设线程如下TTTT = class(TTHread)
    pbulic
      idhttp1:Tidhttp;
      procedure Execute;override;
      constructor create(aaaa:boolean);overload;
    end;procedure TTTT.execute;
    begin
       idhttp.post(.....);
    end;constructor create(......)
    begin
    end;应该加在什么地方????怎么写>???
      

  3.   

    referer 不是引用页么? 好像是拿来服务器统计数据和判断盗链的, post和head,get不一样么?响应OnRedirect,这个应该跟是不是动态创建没关系的,设了HandleRedirects为true后会触发OnRedirect事件。
    TTTT   =   class(TTHread)
    private
      fRedirectUrl: string;
      procedure OnMyRedirect(...);
    pbulic
        idhttp1:Tidhttp;
        procedure   Execute;override;
        constructor   create(aaaa:boolean);overload;
    end;procedure   TTTT.execute;
    begin
          idhttp := Tidhttp.Create();
          fRedirectUrl := ' ';
          idhttp.OnRedirect := OnMyRedirect;
          idhttp.post(.....);
          memo1.text:=fRedirectUrl ; 
    end; constructor   TTTT.create(......)
    beginend;procedure TTTT.OnMyRedirect(...);
    begin
      fRedirectUrl := dest;// 真实地址
    end;