delphi 中如何模拟浏览器把表单提交给一 asp网页处理。

解决方案 »

  1.   

    可以使用clientsocket先截获你提交表单的包信息,然后构造http头我写的一个CSDN提交的程序,给你参考一下 
     //Http头信息
      sends:='POST /Expert/reply.asp HTTP/1.1'+#13#10;
      sends:=sends+'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*'+#13#10;
      sends:=sends+'Accept-Language: zh-cn'+#13#10;
      sends:=sends+'Content-Type: application/x-www-form-urlencoded'+#13#10;
      sends:=sends+'Accept-Encoding: gzip, deflate'+#13#10;
      sends:=sends+'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)'+#13#10;
      sends:=sends+'Host: expert.csdn.net'+#13#10;
      sends:=sends+'Cache-Control: no-cache'+#13+#10;
      //构造Cookie信息
      if edit1.text<>'' then
      begin
       url.InputString  :=trim(edit1.Text);
       sendp:='username='+url.Encode ;
       sendc:='csdnname='+url.Encode ;
      end;
      if edit2.text<>'' then
      begin
       url.InputString  :=trim(edit2.Text);
       sendp:=sendp+';userid='+url.Encode;
       sendc:=sendc+'&csdnpassword='+url.Encode ;
      end;
      if edit3.text<>'' then
      begin
       url.InputString  :=trim(edit3.Text);
       sendp:=sendp+';aszx='+url.Encode;
      end;
      sends:=sends+'Cookie: '+sendp+#13+#10;
      //发送的内容
      url.inputstring:=trim(edit4.text);
      sendc:=sendc+'&Topicid='+url.Encode;
      url.InputString  :=trim(memo1.Text);
      sendc:=sendc+'&ReplyContent='+url.Encode;
      sendc:=sendc+'&xmlReply=aaaaa';
      sends:=sends+'Content-Length: '+inttostr(length(sendc))+#13#10;
      sends:=sends+'Connection: Keep-Alive'+#13+#10+#13#10 +sendc;
      memo2.Lines.Clear;
      memo2.Lines.Add(sends);
      clientsocket1.Socket.SendText(sends);
      

  2.   

    提交帖子截获的包信息:Topicid=1761293&xmlReply=aaaaa&csdnname=&csdnpassword=&ReplyContent=test10.104.9.30(2807)->10.104.9.30(80)
    POST /Expert/reply.asp HTTP/1.1
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*
    Referer: http://expert.csdn.net/Expert/xsl/Reply_Xml.asp?Topicid=1761293
    Accept-Language: zh-cn
    Content-Type: application/x-www-form-urlencoded
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
    Host: expert.csdn.net
    Content-Length: 72
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: ASPSESSIONIDQQQTRARD=DNLFEPPAAODHIOGCMLPPIFKP; room=0; username=dashi888; speaknum=0; speaktime=2003%2D5%2D14+16%3A48%3A06; adminok=True; userid=487815; info1=0; remenber=0; mid=476831; m%5Ftype=1; aszx=0a727a0323ec0c60e5c113526be5ba02
      

  3.   

    可以用XMLHTTP对象Post表单
    以下是转来的function Test()
    {
        strA = "submit1=Submit&text1=scsdfsd";  
       //看起来象 QueryString,但没有?号在这里
        var oReq = new ActiveXObject("MSXML2.XMLHTTP");
        oReq.open("POST","http://ServerName/VDir/TstResult.asp",false);
        oReq.setRequestHeader("Content-Length",strA.length);  
        oReq.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
         //没有这句就玩不转拉
        oReq.send(strA);
        txt1.document.write(oReq.responseText);
    }
      

  4.   

    我曾经做一打印的东东:
    用的是ActiveForm窗体,然后用web 发布的
    如果楼主需要请联系: [email protected]
      

  5.   

    楼主说的是如何自动提交表单吗?
    如果是可参考我以前做的一个自动登录的程序,代码如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      URL : widestring;
    begin
      URL := 'e:\mypost.htm';
      webbrowser.Navigate (URL);
    end;//注意是DocumentComplete而不是DownloadComplete
    procedure TForm1.webbrowserDocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    var
      o : Olevariant;
    beginif UpperCase(WebBrowser.LocationURL) = UpperCase('file:///E:/mypost.htm') then
      begin
        o := WebBrowser.OleObject.document.all.item('username',0);   //找到登录用户名的输入框
        o.value := 'TEST';
        o := WebBrowser.Oleobject.document.all.item('password',0); //找到登录密码的输入框
        o.value := 'TEST';
        WebBrowser.oleobject.document.Forms.Item(0, 0).submit;
      end;end;