У меня есть компонент, созданный предыдущим сотрудником. Он использует Indy (IDTCPClient) и следующий метод для выполнения запросов (где «aReadHeader» — это предопределенный Uri, созданный перед передачей).
function TMyConnector.GET(aRawHeader: String): String;
begin
if Not Connected then Connected := True;
if Connected then
begin
FRawRequest := 'GET /'+ aRawHeader + ' HTTP/'+HTTPVerText+#13#10+
'Host: '+FHost+#13#10+
'Cookie: UserHPos=IOGLO00003000090000C000BS; '+
'LOSID=qsBiy/wEDCq6tOXFzGbOlTD1lmo5AXdFnCkbzzPn6+qCeheYVyTcumRrjsqh+Hds4Fr2gZDazfDzGN1RA+nnHuQQeBy78ZUgctrZyyy9MnGl2qI/ulkV6EPxAfmmLg/lopRq99f5gAcG/dgtytAJjS+aD5DqtHGrAqjiqgtkwuA=; '+
'LoginHPos=IOGLO00003000090000C000BS; '+
'UIHPos=IOGLO00003000020000500003; '+
'LOSG=61939308-7C83-47ED-B909-2D2D10AD7026; '+
'fControllingBusiness=IOGLO000030000900001000050000200001'+#13#10+
'Connection: Close'+#13#10+
#13#10;
FSock.Socket.Write(FRawRequest);
FRawResponse := FSock.Socket.ReadLn(#13#10#13#10,nil);
Result := FRawResponse;
if ResponseStream = nil then ResponseStream := TMemoryStream.Create
else ResponseStream.SetSize(0);
FSock.Socket.ReadStream(ResponseStream,-1,True);
if Connected and (Not KeepAlive) then Connected := False;
end;
end;
Вопрос, который возвращает FRawResponse
HTTP/1.0 200 OK Content-Length: 5560 Date: Mon, 18 Nov 2013 15:05:07 GMT Content-Type: text/html; кодировка = UTF-8 ..., общедоступная
Как я могу получить этот html-контент из ResponseStream в HTML
Один из существующих в настоящее время методов — «GenerateJSON» (см. код ниже). Я хотел бы создать один под названием "GenerateHTML"
Function StreamToArray(Strm:TStream):TArray<Byte>;
Begin
Strm.Position := 0;
SetLength(Result,Strm.Size);
Strm.Read(Result[0],Strm.Size);
End;
Procedure TMyConnector.GenerateJSON;
begin
if ResponseStream <> nil then
Begin
ResponseJSON_V := TJSONObject.ParseJSONValue(StreamToArray(ResponseStream),0) as TJSONValue; // Note ResponseJSON_V is declared as TJSONValue in TMyConnector);
End;
end;
так, мне нужно
Procedure TMyConnector.GenerateHTML;
begin
if ResponseStream <> nil then
Begin
// result:= html from stream here
End;
end;
РЕДАКТИРОВАТЬ:
Procedure TMyConnector.GenerateXML;
var
S: String;
begin
if ResponseStream <> nil then
Begin
try
while FSock.IOHandler.CheckForDataOnSource(30) do
begin
S := FSock.IOHandler.InputBufferAsString;
end;
finally
ResponseStr_v:= S;
end;
End;
end;
TIdHTTP
, предназначенный для этого? В противном случае вы пытаетесь заново изобрести велосипед. - person Jerry Dodge   schedule 18.11.2013TIdHTTP
, который предназначен для этого? Я понимаю, что это был не ваш выбор, но, возможно, вы обнаружите, что это будет намного проще, если вы сделаете этот выбор. - person Jerry Dodge   schedule 18.11.2013