Hilfe
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

REST API 403 Error

nobisseb
Autor ★
6 Beiträge

Hallo Community,

 

ich habe ein Python Tool entwickelt mit dem ich meine Depotdaten analysiere.

Ich nutze dafür die REST API und verwende viele verschiedene requests.

Das Tool hat über ein Jahr reibungslos funktioniert und von einem Tag auf den andere n bekomme ich teils zufällig und immer an anderen Stellen "403" responses auf meine requests.

 

Wurde so etwas wie eine strengere Begrenzung bei der Anzahl an requests/Zeit oder ähnliches?

 

Da das Tool mehrere Monate unverändert funktioniert hat und auch die Fehler jetzt recht zufällig bei immer unterschiedlichen requests auftauchen denke ich nicht dass es an meiner Implementierung liegt.

 

Habt ihr einen Tipp für mich oder schon ähnliches beobachtet?

 

Grüße

Sebastian

17 ANTWORTEN

SMT_Jan-Ove
ehemaliger Mitarbeiter
4.279 Beiträge

Hallo @nobisseb,

 

herzlich willkommen in unserer Community!

 

Ich habe dazu gerne mal bei unserem API Team nachgefragt. Eine genaue Erklärung können wir anhand deiner Angaben jedoch leider nicht liefern. Mögliche Situationen (abgelaufenes Token, falscher Login oder falsche IDs) würden zu HTTP 401 und nicht HTTP 403 führen.

 

Wir empfehlen dir daher, darauf zu achten, nicht zu viele Aufrufe in kurzer Zeit auszuführen und darauf, dass deine IDs immer richtig sind.

 

Beste Grüße

Jan-Ove

nobisseb
Autor ★
6 Beiträge

Hallo Jan-Ove,

 

danke für deine Rückmeldung. 

 

In welchen Fällen bekommt man denn einen HTTP 403 zurück?

Wieviele Aufrufe pro Zeit sind denn als kritisch zu betrachten?

 

Meine IDs sollte das Tool richtig durchreichen, da ich am Code seit über einem Jahr nicht verändert habe und es von einem auf den anderen Tag die HTTP 403 Fehler gab.

 

Besten Dank für eure Mühe

Grüße

Sebastian

SMT_Jan-Ove
ehemaliger Mitarbeiter
4.279 Beiträge

Hallo @nobisseb,

 

denkbar wäre ein Response vom Loadbalancer oder einem Anti-DDOS-System. Die genauen Zeiten können wir dir nicht sagen. Besonders bei Depotpositionen sollte man aber behutsam vorgehen und etwas Zeit (vielleicht im Bereich von einer Sekunde) zwischen Operationen einplanen. Diese Mechanismen sollen verhindern, dass z.B. versehentlich ein Wertpapier doppelt verkauft wird, weil z.B. die UI etwas hinterherhinkt und der Kunde dann ggf. frustriert doppelt geklickt hat. Diese zu häufigen Aufrufe können auch zu Sperren führen.

 

Beste Grüße

Jan-Ove

nobisseb
Autor ★
6 Beiträge

Habe jetzt vor jedem meiner requests testweise eine Pause von ca 5s eingebaut. Insgesamt macht mein Tool nun ca 10 request mit jeweils 5s pause zwischendrinn.

Bekomme leider immernoch sehr willkürlich verteilt die 403 responses 😞

 

Bin jetzt etwas ratlos. Habe leider gar keinen Anhaltspunkt.

Auch wenn die requests vorher tadelos funktioniert haben poste ich euch nochmal einen meiner requests wie ich ihn in python aufgesetzt habe:

 

def get_all_depots_data(clientId, access_token, session_id😞
    response = requests.get(
        f"https://api.comdirect.de/api/brokerage/clients/{clientId}/v3/depots",
        allow_redirects=False,
        headers = {
            "Accept":"application/json",
            "Authorization":"Bearer " + access_token,
            "x-http-request-info":f"{{\"clientRequestId\":{{\"sessionId\":\"{session_id}\",\"requestId\":\"{time_string_generator.currenttime()}\"}}}}",
            "Content-Type":"application/json"
        },
        data='{}',
        )
    return response.json()
 
Die request ID erzeuge ich mir mit aus der aktuellen Zeit:
 
def currenttime():
    return datetime.datetime.now(datetime.timezone.utc).strftime("%Y%m%d%H%M%S%f")
 
Ich weiss nicht ob ihr damit etwas anfangen könnt.
 
Beste Grüße
Sebastian

SMT_Jan-Ove
ehemaliger Mitarbeiter
4.279 Beiträge

Hallo @nobisseb,

 

unsere Kollegen haben noch eine Idee.


Vielleicht ist die request ID der Grund für die Fehlermeldung.Bitte lies daher einmal im Doku Kapitel zu den HTTP-Headern nach, worauf beim HTTP-Header geachtet werden muss.


Hier ein kleines Java-Script Codesnippet als Beispiel, wie die Request ID generiert werden kann:

 

// Request ID aus den letzten (!!!) 9 Zeichen des aktuellen Timestamps in ms:
var ts = _.now().toString();
pm.environment.set("request_id", ts.substring(ts.length - 9, ts.length));

 

Das Beispiel ist aus der offiziellen Postman-Collection genommen, die du auch herunterladen kannst.


Vielleicht hilft das weiter. 🙂

 

Beste Grüße

Jan-Ove

 

com_phil
Autor ★★
22 Beiträge

Hallo @SMT_Jan-Ove ,

 

ich habe seit letzten Samstag das gleiche Problem.

Die schon beschrieben Punkte bin ich schon durchgegangen. 

Mein Timestamp wird ordentlich übergeben und auch alle Request habe ich mal um 5 Sekunden verzögert ohne Erfolg. 

Bei mir wird im Response zusätzlich noch ein hmtl Output gegeben. comdirect.png

Vielen Dank &

Beste Grüße

SMT_Jessica
ehemaliger Mitarbeiter
1.179 Beiträge

Hallo @com_phil,

 

wir haben deine Anfrage an den Fachbereich weitergegeben. Bis zur Antwort kann es derzeit etwas dauern. Daher bitten wir dich um Geduld und melden uns, wenn wir mehr erfahren.

 

Viele Grüße

Jessica

nobisseb
Autor ★
6 Beiträge

Hi all,

auch ich habe nochmal in meinem Code Anpassungen gemacht um 100% konform mit eurer Request Doku zu sein. Problem besteht auch bei mir weiterhin.

 

Danke dass ihr euch der Sache annehmt.

 

Beste Grüße

Sebastian

SMT_Jessica
ehemaliger Mitarbeiter
1.179 Beiträge

Danke auch dir @nobisseb für die Rückmeldung. 

 

Das leite ich ebenfalls weiter.

 

Viele Grüße

Jessica