2016-05-12 10 views
0

Derzeit wird versucht, eine Socket-Verbindung zu einem Host herzustellen, für den die Authentifizierung mit dem Benutzernamen: password @ domain syntax eingerichtet wurde. Die folgende curl Anfrage funktioniert gut, wenn über die Befehlszeile:Progress 4gl Secure Socket-Authentifizierung

/opt/pware/bin/curl -s -v -S -k -X POST -d @/test/worldpay.xml https://username:[email protected]/jsp/merchant/xml/paymentService.jsp 

Das Problem liegt bei dem Versuch, die gleiche worldpay.xml Nutzlast-Datei mit Fortschritt Secure Socket zu schreiben. Meine Buchse verbindet mit dem folgenden:

DEFINE VARIABLE vhSocket AS HANDLE NO-UNDO. 
CREATE SOCKET vhSocket. 

vhSocket:CONNECT('-H test.worldpay.com -S 443 -ssl -nohostverify') NO-ERROR. 
IF vhSocket:CONNECTED() EQ FALSE THEN 
DO: 
    Message "COULD NOT CONNECT". 
    vhSocket:DISCONNECT(). 
    DELETE OBJECT vhSocket NO-ERROR. 
    RETURN. 
END. 
ELSE 
    Message "CONNECTED!". 

ich meine Kopf setze sich wie folgt, wenn die Socket-Verbindung geöffnet wird:

ASSIGN 
vRequest = 'POST ' + 
username + ":" + password + "@" + "/jsp/merchant/xml/paymentService.jsp" + 
' HTTPS/1.1' + chr(13) + chr(10) + 
'Connect: close' + chr(13) + chr(10) + 
'Host: ' + "secure-test.worldpay.com" + chr(13) + chr(10) + 
'Content-Length: ' + string(LENGTH(postdata,"raw")) + chr(13) + chr(10) + 
'Content-Type: text/xml' + chr(13) + chr(10) + 
chr(13) + chr(10) + 
postData + 
chr(13) + chr(10). 


set-byte-order(vData) = BIG-ENDIAN. 
set-size(vData) = LENGTH(vRequest,"raw"). 
put-string(vData,1,LENGTH(vRequest,"raw")) = vRequest. 

vReturnCode = vhSocket:WRITE(vData, 1, LENGTH(vRequest,"raw")). 

Jede Hilfe zu herauszufinden, wie der Header strukturiert sein sollte oder wie man Führen Sie eine grundlegende Authentifizierung über Secure Sockets in Progress durch. Danke Leute!

Antwort

0

Für die HTTP-Basisauthentifizierung senden Sie den Benutzernamen nicht als Teil der URL.

Siehe https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side

Dies ist, was wir in unserem HTTP-Client verwenden, müssen Sie den Anruf zu AddHttpHeader zu Code ändern müssen, die diese Kopfzeile an den Server-Socket senden.

/*------------------------------------------------------------------------------ 
    Purpose: Adds a basic authorization header to the request 
    Notes: 
    @param pcUserName The UserName to use for basic authorization 
    @param pcPassword The password to use for basic authorization 
------------------------------------------------------------------------------*/ 
METHOD PUBLIC VOID SetBasicAuthorization (pcUserName AS CHARACTER, 
              pcPassword AS CHARACTER): 

    DEFINE VARIABLE cBase64  AS LONGCHAR NO-UNDO. 
    DEFINE VARIABLE mAuthorization AS MEMPTR NO-UNDO . 

    ASSIGN cBase64 = SUBSTITUTE ("&1:&2":U, pcUserName, pcPassword) . 

    SET-SIZE (mAuthorization) = LENGTH (cBase64) . 

    PUT-STRING (mAuthorization, 1, LENGTH (cBase64)) = cBase64 . 

    ASSIGN cBase64 = BASE64-ENCODE (mAuthorization) . 

    AddHttpHeader (SUBSTITUTE ("Authorization Basic &1":U, cBase64)) . 

    FINALLY: 
     SET-SIZE (mAuthorization) = 0 .   
    END FINALLY. 

END METHOD . 

Also in Ihrem Fall, versuchen Sie dies:

ASSIGN 
vRequest = 'POST ' + "/jsp/merchant/xml/paymentService.jsp" + 
' HTTPS/1.1' + chr(13) + chr(10) + 
'Connect: close' + chr(13) + chr(10) + 
'Host: ' + "secure-test.worldpay.com" + chr(13) + chr(10) + 
'Content-Length: ' + string(LENGTH(postdata,"raw")) + chr(13) + chr(10) + 
'Content-Type: text/xml' + chr(13) + chr(10) + 
'Authorization: Basic ' + cBase64 + chr(13) + chr(10) + 
chr(13) + chr(10) + 
postData + 
chr(13) + chr(10). 
+0

Dank Mike Ich gebe dies jetzt ein go! Bleiben Sie dran ... –

+0

Ihr Vorschlag scheint das Sendeproblem behoben zu haben. Danke nochmal Mike du bist der Mann! –