1. Gayathri Ravi
  2. PowerBuilder
  3. Wednesday, 20 December 2023 15:00 PM UTC
We are using PostURL() of INET object for sending post request. This function works fine with http URL but If we use PostURL with a "HTTPS" it fails with the error code -5 (Unsupported secure (HTTPS) connection attempted). Could you please confirm whether the PostURL() supports https post?
I found in one of the Appeon forum that there is an alternate function PostData() in HTTPClient object which would support https URL. Please confirm whether this Postdata() supports both http and https post. Also please let us know what is the function that we can use to get the response, because we need to import the response in the datawindow.

We need help to figure out the function which supports both http and https post and also we should be able to receive the response and display it in UI. Below is the code that we are using for http URL,

// create objects
l_inet_result = Create n_oi_print_ir
l_inet = Create inet

//Form and submit XML to API
ls_method = 'printdatarequest'
ls_xml = dw_search.Describe("DataWindow.data.xml")
ll_pos = Pos(ls_xml, '<apiRequest>')
ls_xml = Right(ls_xml, Len(ls_xml) - ll_pos + 1)

ls_url = is_URL

ls_data = 'trackingNumber=' + ls_tracking_nbr
ls_data += '&method=' + ls_method
ls_data += '&data=' + ls_xml

ll_rc = GetContextService( "Internet", l_inet )
IF ll_rc < 0 THEN
Post of_DisplayError ('OI-1999|Unable to get Context Service in Retrieve clicked event')
Return
End If

lblb_args = Blob( ls_data, EncodingUTF8! )
ll_length = Len( lblb_args )
ls_headers = "Content-Type: application/x-www-form-urlencoded~nContent-Length: " + String( ll_length ) + "~n~n"

ll_rc = l_inet.PostURL( ls_url, lblb_args, ls_headers, l_inet_result)
IF ll_rc < 0 THEN
// From the PowerBuilder Help for PostURL
choose case ll_rc
case -1
ls_Text = 'General error'

case -2
ls_Text = 'Invalid URL'

case -4
ls_Text = 'Cannot connect to the Internet'

case -5
ls_Text = 'Unsupported secure (HTTPS) connection attempted'

case -6
ls_Text = 'Internet request failed'

end choose

Post of_DisplayError ('OI-1999|' + ls_Text + ', Return Code = ' + Trim (String (ll_rc)) + '.~r~n~r~nPlease verify the URL value in the System Settings is correct.')
Return
End If


//Process return XML
ls_return = String(l_inet_result.iblb_ir, EncodingUTF8!)

If Pos(ls_return, '<status>success</status>') = 0 Then
// If it's not successful handle the Exception
ll_start = Pos(ls_return, '<exception>') + 11
ll_length = Pos(ls_return, '</exception>') - ll_start
ls_error = Mid(ls_return, ll_start, ll_length)

If Pos(ls_error, '&apos') > 0 Then
ls_error = Replace(ls_error, Pos(ls_error, '&apos'), 6, '')
End If

If Len (Trim (ls_error)) > 0 Then
Post of_DisplayError ('OI-0207|' + ls_error)
Else
Post of_DisplayError ('OI-1999|An unknown error has occured in the Retrieve clicked event after the PostURL.~r~n~r~nPlease verify the URL value in the System Settings is correct.')
End If

Return
End If


If Pos(ls_return, 'outputPreference') = 0 Then
// No values returned
dw_list.Event ue_nothingFound()
Return
End If






 

 

 

Chris Pollach @Appeon Accepted Answer Pending Moderation
  1. Wednesday, 20 December 2023 15:38 PM UTC
  2. PowerBuilder
  3. # 1

Hi Gayathri ;
  I suspect that your issue around the iNet object might be either it's lack of support for newer protocols and/or it's lack of support for the newer TLS 1.2/1.3 encryption required by the HTTPS protocol.
  Please  Note ...  "Inet object is considered to be obsolete. Obsolete features are still available to use, but are no longer eligible for technical support and will no longer be enhanced. You can replace it by using the OpenUrl system function or the HTTPClient object"
  Since the iNet object is obsolete now (even in PB 2019 R3), we are not enhancing it. You can try the PostData() method and see if it works for you.
  However in the long run, Appeon recommends that you refactor your code to use one of the newer approaches.
HTH
Regards ... Chris

Comment
There are no comments made yet.
Armeen Mazda @Appeon Accepted Answer Pending Moderation
  1. Wednesday, 20 December 2023 19:57 PM UTC
  2. PowerBuilder
  3. # 2

Most likely the Web service requires TLS 1.2 or higher, which iNet object doesn't support.  You need to replace the iNet object with HTTPClient object.  https://docs.appeon.com/pb2019r3/objects_and_controls/ch02s41.html

Comment
There are no comments made yet.
David Peace Accepted Answer Pending Moderation
  1. Thursday, 21 December 2023 10:24 AM UTC
  2. PowerBuilder
  3. # 3

Hi

Given that your call works fine without HTTPS then it's almost certainly going to be that your web server does not support TLS 1.1 which is all the the INET object can support. You will have to change to use the HTTPClient and make the call using that.

If you need any mor ehelp, just ask and we will try and help.

All the best

David

Comment
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.