... hat mir ja keine Ruhe gelassen. So sollte es gehen:
Code: Alles auswählen
program PdfFetcher_Synapse;
{$mode objfpc}{$H+}
uses
httpsend, ssl_openssl, classes, sysutils;
const
cHost = 'www.st.com';
cBaseURI = 'https://'+cHost+'/resource/en/datasheet/';
cUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; v: 124.0) Gecko/20100101 Firefox/124.0';
var
Docname : String;
Success : Boolean;
function GetPDF(const aName : String) : Boolean;
var
HTTPClient : THTTPSend;
begin
Result := False;
HTTPClient := THTTPSend.Create;
try
HTTPClient.Headers.Add('Accept: */*');
HTTPClient.UserAgent := cUserAgent;
HTTPClient.Protocol := '1.1';
Success := HTTPClient.HTTPMethod('GET', cBaseURI+aName);
if Success Then
begin
HTTPClient.Document.Position := 0;
HTTPClient.Document.SaveToFile(aName);
end
else
begin
writeln('Get failed.');
writeln('Resultcode = ', HTTPClient.Resultcode);
writeln('Resultstring = ', HTTPClient.Resultstring);
end;
finally
HTTPClient.Free;
end;
end;
begin
if ParamCount <> 1 then
begin
writeln('Usage: PdfFetcher <Dokument>');
Exit;
end;
DocName := ParamStr(1);
if GetPdf(Docname) then
writeln('Success!')
else
writeln('Failed!');
end.
Und auch hier gilt wieder, dass ich das mit schneller Feder hingepinselt habe, ist also funktional und nicht schick.
Wenn er bei ST blockt, dann weil der Client nicht in deren Freund-/Feind-Schema passt. Entweder, weil er den falschen User-Agent hat, er per HTTP (und nicht HTTPS) kommt, die falsche HTTP-Version verwendet o.ä.. Die sind da scheinbar ziemlich eigen.