Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   DHL API über winhttp (https://www.delphipraxis.net/187800-dhl-api-ueber-winhttp.html)

Signum 5. Jan 2016 06:46

DHL API über winhttp
 
Hallo,

ich versuche die DHL Soap API für den Paketversand über die winhttp.dll anzusprechen.

Bei Requests, die mit SoapUI einen Response erhalten, erhalte ich bei einem Aufruf über WinHttpSendRequest keine Antwort. WinHttpReceiveResponse und WinHttpReadData liefern nur 0 Bytes.

Wenn ich den Status nach WinHttpReceiveResponse abfrage, erhalte ich eine 401, obwohl ich https verwende.

Es erfolgen auch keinerlei Fehlermeldungen, die CIG-Authentifizierung ist scheinbar auch erfolgreich, denn sonst erhalte ich eine signifikante Fehlermeldung.

Ich habe schon mit versucht mit WinHttpSetOption und WINHTTP_OPTION_SECURE_PROTOCOLS auf TLS 1 umzustellen, das hat aber auch nichts gebracht. Der

DHL Support verwies auf die neuen Verschlüsselungsverfahren und gibt eine Reihe von Cipher Suites vor, nur wie kann man die bei WinHTTP vorgeben?

Hat jemand hier eine aktuelle funktionierende Anbindung zu DHL und kann mir da einige Tipps geben. Älter Lösungen habe ich hier schon gesehen, aber die funktionieren leider nicht mehr.

mjustin 5. Jan 2016 07:11

AW: DHL API über winhttp
 
Zitat:

Zitat von Signum (Beitrag 1326014)
Bei Requests, die mit SoapUI einen Response erhalten, erhalte ich bei einem Aufruf über WinHttpSendRequest keine Antwort. WinHttpReceiveResponse und WinHttpReadData liefern nur 0 Bytes.

Sieht aus als ob es ein spezielles Problem von WinHTTP ist. Aus dem normalen Webbrowser kann die SOAP Endpunkt Adresse vermutlich problemlos erreicht werden?

Die Cipher Suites des HTTPS Servers von DHL kann man z.B. unter https://www.ssllabs.com/ssltest/ abfragen, die Diagnose liefert auch Hinweise zu speziellen Inkompatibilitäten.

Wir greifen auch auf DHL zu, allerdings gibt es verschiedene Web Services. Welche Endpunkt Adresse ist es konkret?

Signum 5. Jan 2016 07:55

AW: DHL API über winhttp
 
Hallo,

zur Zeit gehe ich über https://cig.dhl.de/services/sandbox/soap und teste das ganze mit einem CreateShipmentDDRequest

Ich hab mir auch die Komponente über WSDL erzeugt, aber noch nicht weiter getestet.

Da ich das ganze später auch in eine externen Prozess in C++ auslagern will, wäre mir winhttp lieber.

Wie sprecht Ihr den den Web-Service an?

mquadrat 5. Jan 2016 08:05

AW: DHL API über winhttp
 
Wie ist die API denn abgesichert? 401 könnte auch der Start einer Digest-Authentication sein. Dort wird die Challenge mit einem 401 geschickt und der Server wartet anschließend auf die Response.

mjustin 5. Jan 2016 08:21

AW: DHL API über winhttp
 
Zitat:

Zitat von Signum (Beitrag 1326017)
Wie sprecht Ihr den den Web-Service an?

Der Endpunkt https://nolb.dhl.de/nextt-online-bus...bpublicservlet wird über Indy's HTTP Komponente abgefragt.

Der Hinweis auf den 401 Status Code sehe ich als "besten Kandidaten" für die Fehlersuche. 401 ist allerdings nicht Digest-spezfisch. Es kan auch eine einfache Basic-Uathentication sein. Bei Aufruf des Endpunkts in meinem Browser erscheint ein Basic Auth Logindialog und im HTTP Antwortheader steht

WWW-Authenticate:"Basic realm="CIG Sandbox Services""

mjustin 5. Jan 2016 08:23

AW: DHL API über winhttp
 
Zitat:

Zitat von Signum (Beitrag 1326017)

zur Zeit gehe ich über https://cig.dhl.de/services/sandbox/soap und teste das ganze mit einem CreateShipmentDDRequest

Versuche einfach mal die Credentials direkt in der URL anzugeben

https://username:passwort@cig.dhl.de...s/sandbox/soap

(Siehe http://stackoverflow.com/questions/2...and-encryption)

Signum 5. Jan 2016 08:45

AW: DHL API über winhttp
 
Die Zugangsdaten setze ich ja schon mit

WinHttpSetCredentials (hRequest, WINHTTP_AUTH_TARGET_SERVER, WINHTTP_AUTH_SCHEME_BASIC, UserName, Password, nil);

Wenn ich da falsche Daten angebe erfolgt auch eine klare Fehlermeldung im Response.

mjustin 5. Jan 2016 08:51

AW: DHL API über winhttp
 
Zitat:

Zitat von Signum (Beitrag 1326025)
Die Zugangsdaten setze ich ja schon mit

WinHttpSetCredentials (hRequest, WINHTTP_AUTH_TARGET_SERVER, WINHTTP_AUTH_SCHEME_BASIC, UserName, Password, nil);

Wenn ich da falsche Daten angebe erfolgt auch eine klare Fehlermeldung im Response.

Ok, als nächstes würde ich dann Fiddler2 als Proxy in die Verbindung einfügen und sehen, was sich bei WinHTTP anders verhält als bei SoapUI. Also beide Request / Responseprotokolle vergleichen.

mquadrat 5. Jan 2016 13:06

AW: DHL API über winhttp
 
mhh bei Basic müsste Pre-Authentication eigentlich funktionieren. Fiddler ist auf jeden Fall das Mittel der Wahl.

Wenn man nicht mit Pre-Authentication arbeitet, dann sieht der Workflow für die Anmeldung laut MSDN übrigens so aus:
Zitat:

A typical WinHTTP application completes the following steps in order to handle authentication.
Request a resource with WinHttpOpenRequest and WinHttpSendRequest.
Check the response headers with WinHttpQueryHeaders.
If a 401 or 407 status code is returned indicating that authentication is required, call WinHttpQueryAuthSchemes to find an acceptable scheme.
Set the authentication scheme, username, and password with WinHttpSetCredentials.
Resend the request with the same request handle by calling WinHttpSendRequest.

mquadrat 6. Jan 2016 11:50

AW: DHL API über winhttp
 
Aus purer Neugier: Warum eigentlich über WinHTTP?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz