procedure TForm1.Button2Click(Sender: TObject);
var
sPostParameters : TStringStream;
sResponse :TStringStream;//TStream;
strPost,strTmpCookie,strTmpHtml,strTmpValue:string; //strResult
i,iGridRow : Integer;
begin
IdHTTP1.Request.SetHeaders;
IdHTTP1.Request.Accept := '*/*';
IdHTTP1.Request.AcceptEncoding := 'gzip, deflate';
IdHTTP1.Request.AcceptLanguage := 'zh-Hans-CN,zh-Hans;q=0.5';
IdHTTP1.Request.Connection := 'Keep-Alive';
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded; charset=utf-8';
IdHTTP1.Request.Host := '111.111.111.111:8999';
IdHTTP1.Request.Referer := 'http://111.111.111.111:8088/wui/index.html';
IdHTTP1.Request.UserAgent := 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363';
IdHTTP1.Request.CustomHeaders.Values['Cookie'] := strCookie;
strPost := 'fromwhere=monitor&menuIds=1%2C101&createdateselect=0&requestname=&workcode=&typeid=&workflowid=&createdatefrom=&createdateto=&creatertype=0'+
'&ownerdepartmentid=&creatersubcompanyid=&requestlevel=&requestid=&nodetype=1&unophrmid=&gdzt=1&tszt=&docids=&hrmids=&crmids=&proids=&';
sPostParameters := TStringStream.Create(strPost);
sResponse := TStringStream.Create('');
try
IdHTTP1.Post(strIndexURL,sPostParameters,sResponse);
except
Application.MessageBox('IdHTTP經常性錯誤!', '錯誤', MB_OK + MB_ICONSTOP);
end;
Memo1.Lines.Add('IdHTTP1.ResponseText : ' + IdHTTP1.ResponseText);
Memo1.Lines.Add('IdHTTP1.Response.ResponseText : ' + IdHTTP1.Response.ResponseText);
Memo1.Lines.Add('IdHTTP1.Response.RawHeaders.Text : ' + IdHTTP1.Response.RawHeaders.Text);
Memo1.Lines.Add('IdHTTP1.Response.RawHeaders.Text : ' + IdHTTP1.Response.RawHeaders.Text);
end;
在http debugger 中能夠看到 response 的body 內容。 如何在 delphi 代碼中實作。
uj5u.com熱心網友回復:
varvBody :string;
vBody := IdHTTP1.Post(strIndexURL,sPostParameters);
Memo1.Lines.Add('你要的Body : ' + vBody );
其實他并不是Body ,而是回傳的HTTP頁面代碼,你應該是一個介面,回傳的是JSON資料,就這樣取就好了。
當然,你用sResponse取也行,只需要把sResponse轉換為string就是你需要的內容了。
uj5u.com熱心網友回復:
Memo1.Lines.Add('你要的Body : ' + sResponse.DataString);uj5u.com熱心網友回復:
sResponse.size 得長度 跟抓取到得大小差不多,但是用 sResponse.DataString取不到內容, memo1.line.add()得話是個 問好? 。用Utf8ToAnsi之后是空得。大神能給再指點指點么。Memo1.Lines.Add('最后' + strCookie);
Memo1.Lines.Add(IntToStr(sResponse.Size));
Memo1.Lines.Add(sResponse.DataString);
uj5u.com熱心網友回復:
我都給你把全部代碼寫出來了,用了兩種方式,第一種肯定是可以的。uj5u.com熱心網友回復:
真的取不到,放到 memo里是 問好?var
sResponse :TMemoryStream;
try
IdHTTP1.Post(strIndexURL,sPostParameters,sResponse);
except
Application.MessageBox('IdHTTP經常性錯誤!', '錯誤', MB_OK + MB_ICONSTOP);
end;
sResponse.SaveToFile('D:\sResponse.txt');

uj5u.com熱心網友回復:
抓包報文正常,說明請求是沒問題,問題應該是出在編碼或者服務端做了壓縮。1、編碼問題試下這個(編碼可以改):
stream := TStringStream.Create('',TEncoding.UTF8);
2、如果是因為服務端回傳壓縮了,好像參考 IdCompressorZLib 這個單元就可以,具體有點忘了,曾經也碰到服務端壓縮問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/223003.html
標籤:網絡通信/分布式開發
