大家好,我用tidhttp向mes系統傳資料,整個url有9000以上個字符,post時報400 bad request,如果去掉一些資料后到8000多個,上傳ok,沒有語法之類的錯誤,請各位看看是什么原因,post對長度有限制嗎,請賜教!
uj5u.com熱心網友回復:
用url傳參是有長度限制的,用post的話資料要放在body里面,直接放url也是不行的。uj5u.com熱心網友回復:
樓上的能否舉一下例,我有這樣試過:respData := TStringStream.Create('');
P := TStringlist.create;
p.add(rawdata=''+strrawdata);//strrawdata有上萬個字符
idhttp.post('http://192.168.10.1:80/mes/integrateservelet?',p,respdata);
但服務器那邊并沒有收到rawdat資料
uj5u.com熱心網友回復:
服務端也要設定為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);
uj5u.com熱心網友回復:
簡單的方法:var Data: TIdMultiPartFormDataStream;
begin
Data := TIdMultiPartFormDataStream.Create;
try
Data.AddFormField('rawdata', Data_string);
IdHTTP1.Post(URL_string, Data);
finally
Data.Free;
end;
end;
uj5u.com熱心網友回復:
你們用的delphi幾,我用的delphi6貌似不能夠實作你們的方法uj5u.com熱心網友回復:
delphi7 + indy10.2實作不了應該是indy版本的問題
uj5u.com熱心網友回復:
太長用postuj5u.com熱心網友回復:
indy一定要用indy10(目前是10.6.xxx),不要用indy9,indy10架構改動比較多,如果用之前的版本,程式移植到高版本會比較麻煩uj5u.com熱心網友回復:
下了個indy10明天試下,用indy10,引數放在url中,會有長度限制嗎?之前用delphi6,indy9,引數放在p.add('raw_data='https://bbs.csdn.net/topics/datastring)中,服務器回傳ok但沒有收到raw_data.
uj5u.com熱心網友回復:
問題已經解決了,用d7+indy10.2.3,idhttp.post(url,request,response),URL中帶長度短的引數,request中帶很長的引數。用d6+indy10.2.3傳request不行。謝謝各位。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/32585.html
標籤:數據庫相關
上一篇:delphi如何讀取csv格式
下一篇:高手來接單
