2016-05-12 6 views
0

現在、username:password @ domain構文を使用して認証設定を持つホストへのソケット接続を試行しています。コマンドラインから実行すると、次のカールリクエストは正常に動作します:進捗状況4glセキュアソケット認証

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

進捗セキュア・ソケットを使用して、同じworldpay.xmlペイロードファイルを投稿しようとすると問題があります。ソケット接続が開かれると、次のように私は私のヘッダーを設定しています

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!". 

:私のソケットには、以下を使用して接続

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")). 

ヘッダが構造化またはどのようにしなければならない方法を考え出す上の任意のヘルプ進歩しているSecure Socketsを介して基本認証を行うことは大いに感謝されます。みんなありがとう!

答えて

0

http(s)の基本認証では、ユーザー名をURLの一部としてPOSTしません。

これは我々がHTTPクライアントで使用するものですhttps://en.wikipedia.org/wiki/Basic_access_authentication#Client_side

を参照してください、あなたはサーバソケットにそのヘッダ行を送信するコードにAddHttpHeaderへの呼び出しを変更する必要があります。

あなたのケースではそう
/*------------------------------------------------------------------------------ 
    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 . 

、これを試してみてください。

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

おかげでマイクは私はこれが今行く与えます!お待ちください... –

+0

あなたの提案は送信の問題を修正したようです。おかげさまでマイクあなたは男です! –