为什么发不了帖呢,返回 HTTP/1.0 200 OK 
为什么返回的版本是1.0呢procedure TForm1.Post;
const
  BaseURL  = 'http://bbs.it.com.cn/';     //地址
var
  IdHTTP: TIdHTTP;
  Params: TStrings;
  HTML: String;
begin
  idHTTP:= TidHTTp.create(self);
  Params := TStringList.Create;
  IdHTTP.AllowCookies := true;
  IdHTTP.HTTPOptions:=[hoForceEncodeParams];
  IdHTTP.ProtocolVersion := pv1_1;
  IDHTTP.Request.Accept:='*/*';
  IdHTTP.Request.Referer:='http://bbs.it.com.cn/ShowPost.aspx?TopicID=68696'; 
  IdHTTP.Request.AcceptLanguage := 'zh-cn';
  IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
  IdHTTP.Request.AcceptEncoding := 'gzip, deflate';
  IdHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; Alexa Toolbar; 56flvplayer 1.0)';
  IdHTTP.Request.Host := 'bbs.it.com.cn';
  IdHTTP.Request.ContentLength := length(Edit1.Text);
  IdHTTP.Request.Connection := 'Keep-Alive';
  IdHTTP.Request.CacheControl := 'no-cache';
  Params.Add('message='+Edit1.Text);
  try
     HTML:=IdHttp.Post(BaseURL+'ShowPost.aspx?TopicID=68696',Params);
  except
   showmessage('error'); 
   exit; 
  end;
  Memo1.Text := IdHttp.ResponseText;
  IdHTTP.Disconnect;
  FreeAndNil(IdHTTP);
  FreeAndNil(Params);
end;  

解决方案 »

  1.   


    第一 length 严重不符合Params.Add('message='+Edit1.Text);
    IdHTTP.Request.ContentLength := length(Edit1.Text);第二,建议使用 流 
    aStream:  TMemoeyStream; 代替 Params: TStrings;
      

  2.   

    Params.Add('__VIEWSTATE=..............'); //这个值要先读一下页面得到,形式如下://wxMjczMDdDI1ODRda3TWXz//WlyE4Ozs+H6ZPcs0cvXeXkA=');
    Params.Add('PostBackClick="提    交"');
      

  3.   

    __VIEWSTATE这东西抓下来每次都变的该怎么弄呢~:(__VIEWSTATE=dDwtNzkwNTkwMjUxOzs%2BehfQgddH8P9Fs%2FaqMEOvnH3uBPA%3D&font=&size=&color=&message=%D6%A7%B3%D6&PostBackClick=%CC%E1++++%BD%BB__VIEWSTATE=dDwxMjczMDI1ODE4Ozs%2BHRda3TWXz%2F%2FWly6ZPcs0cvXeXkA%3D&font=&size=&color=&message=123&PostBackClick=%CC%E1++++%BD%BB
      

  4.   

    用任何一个抓下来的应该都可以。关于ViewState, 参加
    http://home.fego.cn/members/sys/m_Blog/Detail.aspx?id=2504
      

  5.   

    keyz大哥,该怎么弄呢,返回500错误~呜....Params.WriteString('__VIEWSTATE=dDwtNzkwNTkwMjUxOzs%2BehfQgddH8P9Fs%2FaqMEOvnH3uBPA%3D&');
     Params.WriteString('font=&');
     Params.WriteString('size=&');
     Params.WriteString('color=&');
     Params.WriteString('message='+HttpEncode(Edit1.Text)+'&');
     Params.WriteString('PostBackClick='+HttpEncode('提    交'));
      

  6.   

    用 TStringlist就好,delphi会帮你自动编码的。
      

  7.   

    正常提交的是有个&哦这个是浏览器提交时抓下来的:
    __VIEWSTATE=dDwxMjczMDI1ODE4Ozs%2BHRda3TWXz%2F%2FWly6ZPcs0cvXeXkA%3D&font=&size=&color=&message=%B9%FE%B9%FE%B9%FE%B9%FE&PostBackClick=%CC%E1++++%BD%BB
      

  8.   

    &是参数的连接符,你一条一条的Add就不需要了
      

  9.   

    加上__VIEWSTATE的Value就发不成功了:( 
    用httplook软件抓到的是 HTTP/1.0 500 Internal Server Error
      

  10.   

    装一个Visual Sniffer,先用IE发贴,将数据包抓下来,对比你的程序
      

  11.   

    将 Memo1.Text := IdHttp.ResponseText;改为Memo1.Text := HTML;
    直接看返回的数据对不对
      

  12.   

    抓了个IE下提交的:POST /ShowPost.aspx?TopicID=68696 HTTP/1.1
    Accept: */*
    Referer: http://bbs.it.com.cn/ShowPost.aspx?TopicID=68696
    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.1; SV1; .NET CLR 1.1.4322; Alexa Toolbar; 56flvplayer 1.0)
    Host: bbs.it.com.cn
    Content-Length: 151
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: __utma=232739911.1869291454.1052835898.1052835898.1052837372.2; __utmb=232739911; __utmz=232739911.1052835898.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); __utmc=232739911; ASP.NET_SessionId=r4ro1w45mlux5rfrtna41q45; popped=yes__VIEWSTATE=dDwxMjczMDI1ODE4Ozs%2BHRda3TWXz%2F%2FWly6ZPcs0cvXeXkA%3D&font=&size=&color=&message=%B9%FE%B9%FE%B9%FE%B9%FE&PostBackClick=%CC%E1++++%BD%BB
      

  13.   

    是不是对方服务器需要cookie?你将HTML输出看看就知道了
      

  14.   

    不用抓,你直接用IE看一下网页源码,就能看到 __VIEWSTATE 的值,不要用IE的编码后的值,Delphi会帮你编码和加&。
      

  15.   

    恩,改了,__VIEWSTATE有个这个值:dDwxMjczMDI1ODE4Ozs+HRda3TWXz//Wly6ZPcs0cvXeXkA=
    现在提交返回:HTTP/1.0 302 Moved Temporarily 这个了~
      

  16.   

    HTTP/1.0 302 Moved Temporarily 这个需要修改HandleRedirects属性为True
      

  17.   

    但是重定向设为True后就在那不停的发哦~
      

  18.   

    那就别设,把except中的提示去掉,哈哈
      

  19.   

    不过你现在去抓包,用你的程序发的话
    POST /ShowPost.aspx?TopicID=68696 HTTP/1.1
    这里应该还是HTTP/1.0
      

  20.   

    恩,还是返回HTTP/1.0,这是为啥~
      

  21.   

    偶也不清楚呢~~~因为我也遇到过,所以知道肯定还是HTTP/1.0的
      

  22.   

    还有那个HandleRedirects的问题也是,不解决它的异常也似乎不行,如果同时出现其他异常就不好办了。
      

  23.   

    except
    if not IdHTTP1.Response.ResponseCode=302 then
    showmessage('error');
    exit;
    end;
      

  24.   

    keyz的意思是这个异常无法解决么?
      

  25.   

    嗯,这个是server发来的code,只有在异常中屏蔽了,否则只有去修改idHTTP代码了,呵呵。
      

  26.   

    也不是这样的吧~~~HandleRedirects改为true后是不会有302错误的,只不过会重复post所以我想知道有没有办法解决