tidhttp url太长报400 bad request 大家好,我用tidhttp向mes系统传数据,整个url有9000以上个字符,post时报400 bad request,如果去掉一些数据后到8000多个,上传ok,没有语法之类的错误,请各位看看是什么原因,post对长度有限制吗,请赐教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用url传参是有长度限制的,用post的话数据要放在body里面,直接放url也是不行的。 楼上的能否举一下例,我有这样试过:respData := TStringStream.Create('');P := TStringlist.create;p.add(rawdata=''+strrawdata);//strrawdata有上万个字符idhttp.post('http://192.168.10.1:80/mes/integrateservelet?',p,respdata);但服务器那边并没有收到rawdat数据 服务端也要设置为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); 简单的方法:var Data: TIdMultiPartFormDataStream;begin Data := TIdMultiPartFormDataStream.Create; try Data.AddFormField('rawdata', Data_string); IdHTTP1.Post(URL_string, Data); finally Data.Free; end;end; 你们用的delphi几,我用的delphi6貌似不能够实现你们的方法 delphi7 + indy10.2实现不了应该是indy版本的问题 太长用post indy一定要用indy10(目前是10.6.xxx),不要用indy9,indy10架构改动比较多,如果用之前的版本,程序移植到高版本会比较麻烦 下了个indy10明天试下,用indy10,参数放在url中,会有长度限制吗?之前用delphi6,indy9,参数放在p.add('raw_data='datastring)中,服务器返回ok但没有收到raw_data. 问题已经解决了,用d7+indy10.2.3,idhttp.post(url,request,response),URL中带长度短的参数,request中带很长的参数。用d6+indy10.2.3传request不行。谢谢各位。 如何取出.eml文件中邮件的头部和正文? 奇怪,fastreport2.5 不能显示‘加工’两个字? 两个表的sql连接查询,语句有什么错,请高手指点迷津! 【英雄帖】各路好手:英雄有武之地了 如何打开一个paradox表 DELPHI6帮助 关于组件使用的问题 在设计期和运行期动态设定字段,单元格类型 wm_lbuttondown 中 Lparam 的高位和低位表示的那个位置 关于作仪表控件的问题,怎样画指针,刻度。 delphi中的Tchart控件怎么把初始曲线去掉? 分享1个十进制转N进制的功能。
respData := TStringStream.Create('');
P := TStringlist.create;
p.add(rawdata=''+strrawdata);//strrawdata有上万个字符
idhttp.post('http://192.168.10.1:80/mes/integrateservelet?',p,respdata);但服务器那边并没有收到rawdat数据
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);
var Data: TIdMultiPartFormDataStream;
begin
Data := TIdMultiPartFormDataStream.Create;
try
Data.AddFormField('rawdata', Data_string);
IdHTTP1.Post(URL_string, Data);
finally
Data.Free;
end;
end;
实现不了应该是indy版本的问题
之前用delphi6,indy9,参数放在p.add('raw_data='datastring)中,服务器返回ok但没有收到raw_data.