TBeCbHTTP
TBeCbHTTP
Die Klasse TBeCbHTTP ermöglicht das Auslesen von HTML-Quelltext für die Verwendung im Codeblock.
Außerdem stellt die Klasse Eigenschaften und Methoden zur erweiterten Nutzung von HTTP-Requests zur Verfügung.
Eigenschaften | Beschreibung |
---|---|
CbConnectTimeout:N | Timeout in Millisekunden für den Verbindungsaufbau (Default: 0: kein Timeout) |
CbReadTimeout:N | Timeout in Millisekunden für das Lesen des Ergebnisses (Default: 0: kein Timeout) |
CbHTTPBody:C | Inhalt des Body der HTTP-Response, im Fehlerfall leer |
CbErrorHTTPStatusCode:N | Im Fehlerfall: Statuscode der HTTP-Response, sonst = 0
|
CbErrorHTTPStatusText:C | Im Fehlerfall: Statustext der HTTP-Response, sonst leer |
CbErrorHTTPBody:C | Im Fehlerfall: Inhalt des Body der HTTP-Response, sonst leer |
CbAuthentificationMode:N | Authentifizierungsmodus |
CbAuthentificationUserName:C | User-Name für die BasicAuthentification |
CbAuthentificationPassword:C | Passwort für die BasicAuthentification |
CbJSONResponse:O | Antwort eines JSON-Request als Objekt vom Typ TBeasCustomServiceParamItem |
CbHandleRedirects:L | Für Statuscode 3xx (auserhalb 304) weiterleiten nach eine Redirect URL wenn ein URL bekommt werde von Server |
CbUserAgent:C | Angabe welcher Client die Anfrage sendet, z.b. "Mozilla/4.0 (compatible)" |
CbHeaders:O | String-Listen Objekt welche zusätzliche Header für den Request enthalten |
CbResponse:C | identisch zu CbHTTPBody |
CbResponseAsAnsi:C | Inhalt des HTTP-Response, im Fehlerfall leer. Die Rückgabe wird automatisch in das ANSI-Format konvertiert. |
CbResponseHeaders:O | String-Listen Objekt zum Zugriff auf alle Header welche zurückgeliefert werden |
CbResponseCharSet:C | CharSet des HTTP-Response |
CbResponseContentType:C | ContentType des HTTP-Response |
CbRequestAccept:C | HTTP Accept Eigenschaft für den Request. Was wird als Response akzeptiert |
CbRequestContentType:C | ContentType des HTTP Requests |
CbDebugActive:L | Debug-Ausgabe aktivieren. True - es werden alle Kommunikations-Schritte protokolliert |
CbDebugInfo:C | Debug-Ausgabe. Nach Durchführung einer Kommunikation bei CbDebugActive = True, ist hier das Protokoll enthalten |
CbValidateServerCertificate:L | SSL-Algorithmus versucht, um alle SSL-Zertifikate zu verifizieren. Default: True. Mit Wert False wird kein Zertifikat verifiziert. Nach der Verifizierung folgt CbOnValidateCertificate Ereignis. |
CbOnValidateCertificate:E | Ereignis um einen Zertifikat zu verifizieren. Erster Parameter wird von Klasse TbeCBCertificateInfo, die alle Informationen über den Zertifikat trägt, so wie die Rückgabe-Feld CbAccepted. |
Funktionen / Methoden | Parameter | Beschreibung |
---|---|---|
CbGetURL() | aURL:C | Führt mit der übergebenden URL einen HTTP-Get-Request aus. |
CbGetURLHandleRedirects() | aURL:C | Führt mit der übergebenden URL einen HTTP-Get-Request aus. Per aHandleRedirects kann gesteuert werden ob evtl. Server Redirects verfolgt werden oder es einen Fehler gibt. |
CbGet() | aURL:C | identisch zu CbGetURL() |
CbPatch() | aURL:C | Führt mit der übergebenen URL einen HTTP-Patch-Request aus. Dabei wird aData übertragen. |
CbPost() | aURL:C | Führt mit der übergebenen URL einen HTTP-Post-Request aus. Dabei wird aData übertragen. |
CbPut() | aURL:C | Führt mit der übergebenen URL einen HTTP-Put-Request aus. Dabei wird aData übertragen. |
CbDelete() | aURL:C | Führt mit der übergebenen URL einen HTTP-Delete-Request aus. |
CbResponseHeaderExists() | aKey:C | Prüft ob ein Key im Rückgabe Header existiert |
CbResponseHeaderValue() | aKey:C | Gibt den Wert eines Keys im Rückgabe Header zurück |
CbRequest():O | aURL:C | Führt mit der übergebenen URL und dem JSON-Parameter als TbeCbAnything-Object einen JSON-Request im entsprechendem Modus (rmDelete, rmGet, rmPath, rmPost, rmPut) aus. Die Rückgabe des Request wird als TbeCbAnything-Objekt zurückgegeben. Achtung, das Objekt muss selbst per DestroyObject() freigegeben werden. |
CbRequestWithResponse() | aURL:C | Identisch zu CbRequest(), mit der Ausnahme, dass die Rückgabe des Requests in das TbeCbAnything-Objekt aResponse erfolgt. Hiermit kann die Verwaltung des Response-Objekts selbst übernommen werden. |
CbRequestPlain():C | aURL:C | Führt mit der übergebenen URL und den Request-Parametern als String einen Request im entsprechendem Modus (rmDelete, rmGet, rmPath, rmPost, rmPut) aus. Mit dem Parameter aResultAsAnsi kann die Rückgabe des Request ins ANSI-Format konvertiert werden. |
CbJSONRequest() | aURL:C | Führt mit der übergebenen URL und dem JSON-Parameter als TBeasCbServiceInputParam-Object einen JSON-Request im entsprechendem Modus (1 = get, 2 = post) aus. |
Beispiel
//******************************************************************************
// Liefert als Ergebnis den Inhalt der HTML-Seite
// Im Fehlerfall enthält cHTTPGetResult alle verfügbaren Informationen
// über den aufgetretenen Fehler.
// Im Fall von einem Redirect, ist der Inhalt der neue HTML-Seite das Ergebnis
//******************************************************************************
function HTTPRequest(lUseRedirect:L, lAllowRedirect:L)
|cURL, oHTTP, cDivider, cResult|
cResult := '',
cURL := 'http://www.google.com/search?q=example',
cDivider := Replicate('-', 80),
oHTTP := CreateObject('TBeCbHTTP'),
startseq,
oHTTP.CbConnectTimeout := 2000,
oHTTP.CbReadTimeout := 2000,
oHTTP.CbUserAgent := 'Mozilla/4.0 (compatible)',
CollAdd(oHTTP.CbHeaders, 'be-test:beheader'),
startseq
if lUseRedirect then
oHTTP.CbGetURLHandleRedirects(cURL, lAllowRedirect),
else
oHTTP.CbGetURL(cURL), // HTTP-Request auslösen
endif,
cResult := oHTTP.CbHTTPBody,
onerror
cResult :=
GetErrorText() + crlf + cDivider + crlf +
'ErrorHTTPStatusCode = ' + Str(oHTTP.CbErrorHTTPStatusCode) + crlf + cDivider + crlf +
'ErrorHTTPStatusText = ' + oHTTP.CbErrorHTTPStatusText + crlf + cDivider + crlf +
'ErrorHTTPBody = ' + oHTTP.CbErrorHTTPBody,
stopseq,
always,
DestroyObject(oHTTP),
stopseq,
Result := cResult,
end,
//******************************************************************************
// Verifiziert übergebenen Zertifikat
//******************************************************************************
function HTTPSValidate(oCert:O),
Writeln('Depth: ' + Str(oCert.CbDepth)),
Writeln('Version: ' + Str(oCert.CbVersion)),
Writeln('SerialNumber: ' + oCert.CbSerialNumber),
Writeln('SignatureAlgorithmAsNID: ' + Str(oCert.CbSignatureAlgorithmAsNID)),
Writeln('SignatureAlgorithmAsString: ' + oCert.CbSignatureAlgorithmAsString),
Writeln('IssuerString: ' + oCert.CbIssuerString),
Writeln('ValidFromInGMT: ' + DToS(oCert.CbValidFromInGMT)),
Writeln('ValidToInGMT: ' + DToS(oCert.CbValidToInGMT)),
Writeln('SubjectString: ' + oCert.CbSubjectString),
Writeln('ThumbprintAsMD5: ' + oCert.CbThumbprintAsMD5),
Writeln('ThumbprintAsSHA1: ' + oCert.CbThumbprintAsSHA1),
Writeln('ThumbprintAsSHA256: ' + oCert.CbThumbprintAsSHA256),
Writeln('ThumbprintAsSHA256: ' + oCert.CbThumbprintAsSHA256),
Writeln('Von SSL Accepted: ' + iif(oCert.CbAccepted, 'true', 'false')),
Writeln('Error: ' + Str(oCert.CbErrorValue)),
Writeln('ErrorString: ' + oCert.CbErrorString),
oCert.CbSaveToFile('C:\temp\cert\' + oCert.CbThumbprintAsMD5 + '.pem'),
oCert.CbAccepted := true,
end,
//******************************************************************************
// Liefert als Ergebnis den Inhalt des POST-Request zurück
//******************************************************************************
function HTTPSPost()
|cHTTPBody:C, oHTTP|
cHTTPBody := '',
oHTTP := CreateObject("TBeCBHTTP"),
startseq,
AssignEvent(oHTTP, 'CbOnValidateCertificate', 'HTTPSValidate'),
oHTTP.CbUserAgent := "Mozilla/5.0 (compatible)",
CollAdd(oHTTP.CbHeaders, "be-test:testheader"),
CollAdd(oHTTP.CbHeaders, "accept:application/json"),
oHttp.CbPost("https://postman-echo.com/post", 'USERID=12345' + CRLF + 'PASSWD=56789'),
cHTTPBody := oHTTP.CbResponseAsAnsi,
always,
DestroyObject(oHTTP),
stopseq,
Result := cHTTPBody,
end,
//******************************************************************************
// Liefert als Ergebnis den Inhalt der HTML-Seite
// Im Fehlerfall enthält cHTTPGetResult alle verfügbaren Informationen
// über den aufgetretenen Fehler.
// Im Fall von einem Redirect, ist der Inhalt der neue HTML-Seite das Ergebnis
//******************************************************************************
function HTTPSRequest(lUseRedirect:L, lAllowRedirect:L, lValidate:L)
|cURL, oHTTP, cDivider, cResult|
cResult := '',
cURL := 'https://www.google.com',
cDivider := Replicate('-', 80),
oHTTP := CreateObject('TBeCbHTTP', 'MyHttp'),
startseq,
oHTTP.CbConnectTimeout := 2000,
oHTTP.CbReadTimeout := 2000,
oHTTP.CbUserAgent := 'Mozilla/4.0 (compatible)',
CollAdd(oHTTP.CbHeaders, 'be-test:beheader'),
if lValidate then
AssignEvent(oHTTP, 'CbOnValidateCertificate', 'HTTPSValidate'),
else
oHTTP.CbValidateServerCertificate := false,
endif,
startseq
if lUseRedirect then
oHTTP.CbGetURLHandleRedirects(cURL, lAllowRedirect),
else
oHTTP.CbGetURL(cURL), // HTTP-Request auslösen
endif,
cResult := oHTTP.CbHTTPBody,
onerror
cResult :=
GetErrorText() + crlf + cDivider + crlf +
'ErrorHTTPStatusCode = ' + Str(oHTTP.CbErrorHTTPStatusCode) + crlf + cDivider + crlf +
'ErrorHTTPStatusText = ' + oHTTP.CbErrorHTTPStatusText + crlf + cDivider + crlf +
'ErrorHTTPBody = ' + oHTTP.CbErrorHTTPBody,
stopseq,
always,
DestroyObject(oHTTP),
stopseq,
Result := cResult,
end,
//******************************************************************************
// Liefert als Ergebnis den Inhalt des DELETE-Request zurück
//******************************************************************************
function HTTPDelete(aData:C)
| oHttp, i, cUrl, aDataToDelete, aResponse, cDivider |
startseq
oHttp := CreateObject('TbeCbHTTP', 'DeleteData'),
oHttp.CbHandleRedirects := true,
aResponse := {},
cDivider := Replicate('-', 80),
startseq
for i := 1 to Len(aData) do
cUrl := 'http://localhost:8000/service/rest/data/' + aData[i],
oHttp.CbDelete(cUrl),
AAdd(aResponse, oHttp.CbResponseAsAnsi),
end,
Result := aResponse,
onerror,
Result :=
GetErrorText() + crlf + cDivider + crlf +
'ErrorHTTPStatusCode = ' + Str(oHTTP.CbErrorHTTPStatusCode) + crlf + cDivider + crlf +
'ErrorHTTPStatusText = ' + oHTTP.CbErrorHTTPStatusText + crlf + cDivider + crlf +
'ErrorHTTPBody = ' + oHTTP.CbErrorHTTPBody,
stopseq,
always,
DestroyObject(oHttp),
stopseq,
end,
writeln('--- Kein Redirect ---'),
writeln( HTTPRequest(false, false) ),
writeln('--- Redirect verboten ---'),
writeln( HTTPRequest(true, false) ),
writeln('--- Redirect erlaubt ---'),
writeln( HTTPRequest(true, true) ),
writeln('--- HTTP-Post, Verifizierung mit CbOnValidateCertificate ---'),
writeln( HTTPSPost() ),
writeln('--- Kein Redirect, Verifizierung mit CbOnValidateCertificate ---'),
writeln( HTTPSRequest(false, false, true) ),
writeln('--- Redirect verboten, Alle Certifikate gültig ---'),
writeln( HTTPSRequest(true, false, false) ),
writeln('--- Redirect erlaubt, Verifizierung mit CbOnValidateCertificate ---'),
writeln( HTTPSRequest(true, true, true) ),
writeln('--- Löschung ausgewählter Dateien ---'),
writeln( HTTPDelete({'Datei1', 'Datei2'}) ),