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'}) ),