Skip to Content

Adding a cookie to an http request

Hi all,

I need to do a http request adding a specific cookie. It's working fine except the cookie part. It seems the cookie is not being sent according to the responde I'm getting from the server.

This is the piece of code to create the http client:

CALL METHOD cl_http_client=>create_by_url EXPORTING
url ='url'

IMPORTING client = http_client

EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3OTHERS = 4.

I have used several pieces of code to add the cookie but unfortunately no success:

http_client->request->set_cookie( name = 'JSESSIONID'

value = l_session_id ).


CALL METHOD http_client->request->set_cookie EXPORTING
name = 'JSESSIONID' value =

l_session_id.


DATA: l_cookie_value TYPE string.

CONCATENATE 'JSESSIONID=' l_session_id INTO
l_cookie_value.

CALL METHOD http_client->request->set_header_field EXPORTING
name = 'Cookie' value = l_cookie_value.

Any ideas what's wrong with my code?

Regards,

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

2 Answers

  • Apr 13 at 12:25 PM

    I assume you are making an API call for something like POST/PATCH. If this is the case then first you will need to fetch XSRF token along with it you will get the cookie, use the object to make further POST/PATCH calls Please find below sample code taken from API Hub for a PATCH Request

    DATA: lo_http_client TYPE REF TO if_http_client.
    DATA: response TYPE string.
    
    
    "create HTTP client by url
    "API endpoint for API sandbox 
    CALL METHOD cl_http_client=>create_by_url
      EXPORTING
        url                = 'https://sandbox.api.sap.com/workflow-service/rest/v1/task-instances/{taskInstanceId}'
    
    
      IMPORTING
        client             = lo_http_client
      EXCEPTIONS
        argument_not_found = 1
        plugin_not_active  = 2
        internal_error     = 3
        OTHERS             = 4.
    
    
    "Available API Endpoints
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.ap1.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.br1.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.ca1.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.cn1.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.eu3.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.hanatrial.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.jp1.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.ru1.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.us1.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.us2.hana.ondemand.com/workflow-service/rest
    "https://bpmworkflowruntime{provideraccountname}-{consumeraccountname}.us3.hana.ondemand.com/workflow-service/rest
    
    
    IF sy-subrc <> 0.
      "error handling
    ENDIF.
    
    
    "setting request method
    lo_http_client->request->set_method('PATCH').
    
    
    "adding headers
    lo_http_client->request->set_header_field( name = 'X-CSRF-Token' value = 'string' ).
    lo_http_client->request->set_header_field( name = 'Content-Type' value = 'application/json' ).
    lo_http_client->request->set_header_field( name = 'Accept' value = 'application/json' ).
    "API Key for API Sandbox
    lo_http_client->request->set_header_field( name = 'APIKey' value = '<API_KEY>' ).
    
    
    
    
    "Available Security Schemes for productive API Endpoints
    "Basic Authentication, OAuth 2.0
    
    
    "Basic Auth : provide username:password in Base64 encoded in Authorization header
    "lo_http_client->request->set_header_field( name = 'Authorization' value = 'Basic <Base64 encoded value>' ).
    
    
    CALL METHOD lo_http_client->request->set_cdata
      EXPORTING
        data = '{  "context": {},  "status": "COMPLETED",  "subject": "string",  "description": "string",  "recipientUsers": "string",  "recipientGroups": "string",  "processor": "string",  "dueDate": "2018-04-13T12:22:35.793Z",  "priority": "VERY_HIGH"}'.
    
    
    CALL METHOD lo_http_client->send
      EXCEPTIONS
        http_communication_failure = 1
        http_invalid_state         = 2
        http_processing_failed     = 3
        http_invalid_timeout       = 4
        OTHERS                     = 5.
    
    
    IF sy-subrc = 0.
      CALL METHOD lo_http_client->receive
        EXCEPTIONS
          http_communication_failure = 1
          http_invalid_state         = 2
          http_processing_failed     = 3
          OTHERS                     = 5.
    ENDIF.
    
    
    IF sy-subrc <> 0.
      "error handling
    ENDIF.
    
    
    response = lo_http_client->response->get_cdata( ).
    
    
    WRITE: 'response: ', response.
    
    Add comment
    10|10000 characters needed characters exceeded

  • Apr 17 at 07:27 AM

    Hi all,

    My problem is now solved. It turns out the cookie name has the character "." and SAP is encoding/replacing the "." character by "%2e". As a result the server is not understanding the cookie name.

    To avoid the encoding, just apply SAP NOTE 1160362 to set the parameter "ict/disable_cookie_urlencoding=1".

    Regards,

    Add comment
    10|10000 characters needed characters exceeded