procedure TFormMain.GetTHTTPClient (
Const xURL :
String );
Var tmp :
String;
Watch : TStopwatch;
begin
Watch := TStopWatch.Create();
Watch.Start;
TThread.CreateAnonymousThread(
procedure
var
HttpClient: System.Net.HttpClient.THttpClient;
HttpResponse: System.Net.HttpClient.IHttpResponse;
begin
HttpClient := System.Net.HttpClient.THTTPClient.Create;
try
HttpClient.UserAgent := '
Mozilla/4.0 (compatible; MSIE 7.0; Windows; U; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 */*';
HttpClient.MaxRedirects := 10;
HttpClient.HandleRedirects := True;
HttpClient.ContentType := '
*/*';
HttpClient.Accept := '
*/*';
HttpClient.ResponseTimeout := 5000;
HttpClient.ConnectionTimeout := 5000;
try
HttpResponse := HttpClient.Get( xURL );
tmp := HttpResponse.ContentAsString();
except
on e: System.SysUtils.Exception
do
tmp := '
Error Occured @ '+xURL+'
- '+e.
Message;
end;
finally
HttpClient.Free;
TThread.Synchronize(
nil,
procedure
begin
Watch.Stop;
FinishTread(xURL, tmp, Watch.ElapsedMilliseconds);
end);
end;
end
).Start;
end;
procedure TFormMain.FinishTread(
Const sUrl, sData:
String;
Const Millisecs : Int64 );
var
i: Integer;
begin
DataString := sData;
if System.Length(DataString) > 0
then
begin
MemoText.Lines.Text := DataString;
i := System.Length(MemoText.Lines.Text) ;
MemoText.Lines.Add('
');
MemoText.Lines.Add('
HTTP/S HTML Source from: '+sURL);
if System.Length(DataString)-i < 0
then MemoText.Lines.Add('
Downloaded: '+System.SysUtils.IntToStr(System.Length(DataString)) +'
bytes, displaying: ' +System.SysUtils.IntToStr(i)+ '
chars. Additional added '+System.SysUtils.IntToStr(i-Length(DataString))+'
extra Unicode bytes.');
if System.Length(DataString)-i = 0
then MemoText.Lines.Add('
Downloaded: '+System.SysUtils.IntToStr(System.Length(DataString)) +'
bytes, displaying: ' +System.SysUtils.IntToStr(i)+ '
chars. Plain Ascii detected.');
if System.Length(DataString)-i > 0
then MemoText.Lines.Add('
Downloaded: '+System.SysUtils.IntToStr(System.Length(DataString)) +'
bytes, displaying: ' +System.SysUtils.IntToStr(i)+ '
chars. Warning! '+System.SysUtils.IntToStr(System.Length(DataString)-i)+'
bytes missing in Display!');
if CheckBoxBenchmark.Checked
then
begin
if (((ComboBoxBitsBytes.ItemIndex = 0)
or(ComboBoxBitsBytes.ItemIndex = 1))
and((ComboBoxByteCalc.ItemIndex = 0)
or(ComboBoxByteCalc.ItemIndex = 1)))
then
MemoText.Lines.Add('
Downloaded needed '+System.SysUtils.IntToStr(Millisecs)+'
ms, that is '+System.SysUtils.FloatToStrF(Length(DataString) / (Millisecs / 1000), ffFixed, 35, 2)+'
bytes/second <-> '+System.SysUtils.FloatToStrF((Length(DataString) / 1024) / (Millisecs / 1000), ffFixed, 35, 2)+'
kbyte/s <-> '+System.SysUtils.FloatToStrF((Length(DataString) / 1024 / 1024) / (Millisecs / 1000), ffFixed, 35, 2)+'
mbyte/s.');
if (((ComboBoxBitsBytes.ItemIndex = 0)
or(ComboBoxBitsBytes.ItemIndex = 2))
and((ComboBoxByteCalc.ItemIndex = 0)
or(ComboBoxByteCalc.ItemIndex = 1)))
then
MemoText.Lines.Add('
Downloaded needed '+System.SysUtils.IntToStr(Millisecs)+'
ms, that is '+System.SysUtils.FloatToStrF((Length(DataString)*8) / (Millisecs / 1000), ffFixed, 35, 2)+'
bits/second <-> '+System.SysUtils.FloatToStrF(((Length(DataString)*8) / 1024) / (Millisecs / 1000), ffFixed, 35, 2)+'
kbit/s <-> '+System.SysUtils.FloatToStrF(((Length(DataString)*8) / 1024 / 1024) / (Millisecs / 1000), ffFixed, 35, 2)+'
mbit/s.');
if ComboBoxByteCalc.ItemIndex = 0
then
MemoText.Lines.Add('
Above calculations based on 1024 byte = 1 kb for your pleasure 1000 byte = 1 kb follows.');
if (((ComboBoxBitsBytes.ItemIndex = 0)
or(ComboBoxBitsBytes.ItemIndex = 1))
and((ComboBoxByteCalc.ItemIndex = 0)
or(ComboBoxByteCalc.ItemIndex = 2)))
then
MemoText.Lines.Add('
Downloaded needed '+System.SysUtils.IntToStr(Millisecs)+'
ms, that is '+System.SysUtils.FloatToStrF(Length(DataString) / (Millisecs / 1000), ffFixed, 35, 2)+'
bytes/second <-> '+System.SysUtils.FloatToStrF((Length(DataString) / 1000) / (Millisecs / 1000), ffFixed, 35, 2)+'
kbyte/s <-> '+System.SysUtils.FloatToStrF((Length(DataString) / 1000 / 1000) / (Millisecs / 1000), ffFixed, 35, 2)+'
mbyte/s.');
if (((ComboBoxBitsBytes.ItemIndex = 0)
or(ComboBoxBitsBytes.ItemIndex = 2))
and((ComboBoxByteCalc.ItemIndex = 0)
or(ComboBoxByteCalc.ItemIndex = 2)))
then
MemoText.Lines.Add('
Downloaded needed '+System.SysUtils.IntToStr(Millisecs)+'
ms, that is '+System.SysUtils.FloatToStrF((Length(DataString)*8) / (Millisecs / 1000), ffFixed, 35, 2)+'
bits/second <-> '+System.SysUtils.FloatToStrF(((Length(DataString)*8) / 1000) / (Millisecs / 1000), ffFixed, 35, 2)+'
kbit/s <-> '+System.SysUtils.FloatToStrF(((Length(DataString)*8) / 1000 / 1000) / (Millisecs / 1000), ffFixed, 35, 2)+'
mbit/s.');
end;
end;
ButtonDownload.Enabled := True;
end;
procedure TFormMain.ButtonDownloadClick(Sender: TObject);
begin
ButtonDownload.Enabled := False;
MemoText.Clear;
MemoText.Lines.Add('
Downloading Data from ' +Temp1);
MemoText.Lines.Add('
Please Wait...');
GetTHTTPClient( '
https://www.google.com/' );
// hier startet nun der thread und macht sein ding bis er fertig ist.
end;