Requestbuilder post returns statuscode 404 OE 11.7 - Forum - OpenEdge Development - Progress Community

Requestbuilder post returns statuscode 404 OE 11.7

 Forum

Requestbuilder post returns statuscode 404 OE 11.7

This question is answered

HI,

The following code works fine with OE 11.6.2, but fails with 11.7

De request.log points to C:\Temp\request-raw.txt which containes the following :

OpenEdge 11.7
POST /?token=AwYAAAD57FoHGPLsV4Z3UbF+HOUcwUsVYFJ+hli2hLE5NLyL2AnJD50x9eitoUyYaMLasiPCvJyKY1cmFvSi0E+xFrQSPCmDEDL0019wmJSU9aKSKjR2f6MAlNlzd8t4iutjnjM= HTTP/1.1

OpenEdge 11.6.2
POST /?token=AwYAAAD57FoHGPLsV4Z3UbF%2BHOUcwUsVYFJ%2Bhli2hLE5NLyL2AnJD50x9eitoUyYaMLasiPCvJyKY1cmFvSi0E%2BxFrQSPCmDEDL0019wmJSU9aKSKjR2f6MAlNlzd8t4iutjnjM%3D HTTP/1.1

I found https://knowledgebase.progress.com/articles/Article/URI-Encode-works-differently-in-11-7-encodes-the-equal-sign and base on that article I constructed the url as is done for variable oURI2 in the code. 

In that case both 11.6.2 and 11.7 fail the request. The query string in C:\Temp\request-raw.txt is :

POST /?token=AwYAAAD57FoHGPLsV4Z3UbF%252BHOUcwUsVYFJ%252Bhli2hLE5NLyL2AnJD50x9eitoUyYaMLasiPCvJyKY1cmFvSi0E%252BxFrQSPCmDEDL0019wmJSU9aKSKjR2f6MAlNlzd8t4iutjnjM%253D HTTP/1.1

 

Can anyone point me in the right direction to make this work for 11.7?

What am I doing wrong?

Thnx in advance!

Kind regards,
Johan Beumer

using OpenEdge.Net.*.
using OpenEdge.Net.HTTP.IHttpRequest.
using OpenEdge.Net.HTTP.IHttpResponse.
using OpenEdge.Net.HTTP.RequestBuilder.
using OpenEdge.Net.HTTP.ClientBuilder.
using OpenEdge.Core.String.

define variable oRequest     as IHttpRequest  no-undo.
define variable oRequestBody as String        no-undo.
define variable cToken       as character     no-undo.
define variable oResponse    as IHttpResponse no-undo.
define variable cChannel     as character     no-undo.
define variable oURI         as URI           no-undo.
define variable oURI2        as URI           no-undo.

session:error-stack-trace = true.
session:debug-alert = true.
log-manager:logfile-name = 'request.log'.
log-manager:logging-level = 6.
log-manager:clear-log().

cToken = "MySecretToken".
cChannel = "https://bl2p.notify.windows.com/?token=AwYAAAD57FoHGPLsV4Z3UbF%2BHOUcwUsVYFJ%2Bhli2hLE5NLyL2AnJD50x9eitoUyYaMLasiPCvJyKY1cmFvSi0E%2BxFrQSPCmDEDL0019wmJSU9aKSKjR2f6MAlNlzd8t4iutjnjM%3D".
oRequestBody = new String('<?xml version="1.0" encoding="UTF-8"?><xml version="1.0" encoding="utf-8"></xml>').

oURI = URI:Parse(cChannel).

oURI2 = OpenEdge.Net.URI:Parse(oURI:BaseURI). 
oURI2:AddQuery("token",URI:encode(oURI:GetQueryValue("token"), UriEncodingTypeEnum:default)).

oRequest = RequestBuilder:Post(oURI / oURI2, oRequestBody)
                         :ContentType("text/xml")
                         :AddHeader("X-WNS-Type", "wns/toast")
                         :AddHeader("Authorization", "Bearer " + cToken)
                         :Request.

oResponse = ClientBuilder:Build():Client:Execute(oRequest).

message oResponse:statuscode skip
        view-as alert-box information buttons ok.
Verified Answer
  • Since you asked, I looked at the service packs and the issues that were solved with them. For 11.7.3 there has been a change for the issue I'm running into. I installed sp3 and now I got it working. Although still not the way it works in 11.6.2 but I'm satisfied!

    In 11.6.2 it's enough to say :

    oURI = URI:Parse(cChannel).

    In 11.7 you still have to construct a new URI-object like this :

    oURI = URI:Parse(cChannel).
    oURI2 = OpenEdge.Net.URI:Parse(oURI:BaseURI). 
    oURI2:AddQuery("token",URI:encode(oURI:GetQueryValue("token"), UriEncodingTypeEnum:default)).
    

    Peter, thnx for asking!

    Kind regards,
    Johan Beumer

All Replies
  • Which SP of 11.7 are you on?
  • No service pack. Should I use one?

  • Since you asked, I looked at the service packs and the issues that were solved with them. For 11.7.3 there has been a change for the issue I'm running into. I installed sp3 and now I got it working. Although still not the way it works in 11.6.2 but I'm satisfied!

    In 11.6.2 it's enough to say :

    oURI = URI:Parse(cChannel).

    In 11.7 you still have to construct a new URI-object like this :

    oURI = URI:Parse(cChannel).
    oURI2 = OpenEdge.Net.URI:Parse(oURI:BaseURI). 
    oURI2:AddQuery("token",URI:encode(oURI:GetQueryValue("token"), UriEncodingTypeEnum:default)).
    

    Peter, thnx for asking!

    Kind regards,
    Johan Beumer

  • You can save yourself some code and create the URI like below
     
    oURI = new URI('https','bl2p.notify.windows.com').
    oURI:AddQuery("token", 'AwYAAAD57FoHGPLsV4Z3UbF%2BHOUcwUsVYFJ%2Bhli2hLE5NLyL2AnJD50x9eitoUyYaMLasiPCvJyKY1cmFvSi0E%2BxFrQSPCmDEDL0019wmJSU9aKSKjR2f6MAlNlzd8t4iutjnjM%3D').
     
    In 11.7.3 there’s also a new Parse() method that takes a second parameter to indicate whether to URL-decode the incoming string (which happens by default).  It’s this URL-Decoding on Parse() that causes the token value to get messed up.
     
    Just call
    oURI = OpenEdge.Net.URI:Parse(cchannel, no).
     
    Method headers FYI.
     
        /** Parses a string containing a URI and creates a URI object from it
       
            @param character a string URI (eg http://www.progress.com/)
            @return URI A URI representation of the string. */
        method static public URI Parse(input pcURI as character):
            return URI:Parse(pcURI, true).
        end method.
       
        /** Parses a string containing a URI and creates a URI object from it
           
            @param character a string URI (eg http://www.progress.com/)
            @param logical TRUE if the incoming strings should be URL-decoded
            @return URI A URI representation of the string. */
        method static public URI Parse(input pcURI as character,
                                       input pDecode as logical):