大家好,我用tidhttp向mes系统传数据,整个url有9000以上个字符,post时报400 bad request,如果去掉一些数据后到8000多个,上传ok,没有语法之类的错误,请各位看看是什么原因,post对长度有限制吗,请赐教!

解决方案 »

  1.   

    用url传参是有长度限制的,用post的话数据要放在body里面,直接放url也是不行的。
      

  2.   

    楼上的能否举一下例,我有这样试过:
    respData := TStringStream.Create('');
    P := TStringlist.create;
    p.add(rawdata=''+strrawdata);//strrawdata有上万个字符
    idhttp.post('http://192.168.10.1:80/mes/integrateservelet?',p,respdata);但服务器那边并没有收到rawdat数据
      

  3.   

    服务端也要设置为post方式接收,收不到的话客户端这边应该会有报错的吧,可以参考一下我的代码,是java的服务端,json格式的数据。
      http.HandleRedirects := True;
      http.ReadTimeout := 20000;
      http.Request.ContentType := 'application/json';
      http.Compressor := TIdCompressorZLib.Create(http);
      responseStream := TStringStream.Create('');
      requestStream := TStringStream.Create(jo.AsJSon());
      requestStream.Position := 0;
      http.Post(AUrl, requestStream, responseStream);
      Result := UTF8Decode(responseStream.DataString);
      

  4.   

    简单的方法:
    var Data: TIdMultiPartFormDataStream;
    begin
      Data := TIdMultiPartFormDataStream.Create;
      try
        Data.AddFormField('rawdata', Data_string);
        IdHTTP1.Post(URL_string, Data);
     finally
       Data.Free;
     end;
    end;
      

  5.   

    你们用的delphi几,我用的delphi6貌似不能够实现你们的方法
      

  6.   

    delphi7 + indy10.2
    实现不了应该是indy版本的问题
      

  7.   

    太长用post
      

  8.   

    indy一定要用indy10(目前是10.6.xxx),不要用indy9,indy10架构改动比较多,如果用之前的版本,程序移植到高版本会比较麻烦
      

  9.   

    下了个indy10明天试下,用indy10,参数放在url中,会有长度限制吗?
    之前用delphi6,indy9,参数放在p.add('raw_data='datastring)中,服务器返回ok但没有收到raw_data.
      

  10.   

    问题已经解决了,用d7+indy10.2.3,idhttp.post(url,request,response),URL中带长度短的参数,request中带很长的参数。用d6+indy10.2.3传request不行。谢谢各位。