Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Robot framework pass cookie to get request (RequestsLibrary) - TypeError

I need to pass cookie value to Get request keyword to make it work, but it is still failing. I am not sure how to pass it correctly there. Documentation of the keyword says about the headers: "headers: a dictionary of headers to use with the request" I have test like this, using Library RequestsLibrary:

Check request and response
    Do Local Login  ${username}    ${password}  #this is my custom keyword - opens browser and logs in using UI
    ${cookie_value}=  Get Cookie Value  JSESSIONID
    Create Session  session1  https://oururl.com  verify=${False}  cookies=${cookie_value}
    ${dict}=  Create Dictionary   Cookie=${cookie_value}
    ${resp}=  Get request  session1  /somepage/request  headers=${dict}

It always returns TypeError: string indices must be integers. Traceback:

        Traceback (most recent call last):
  File "c:\python27\lib\site-packages\RequestsLibrary\RequestsKeywords.py", line 370, in get_request
    session, uri, params, headers, json, redir, timeout)
  File "c:\python27\lib\site-packages\RequestsLibrary\RequestsKeywords.py", line 897, in _get_request
    verify=self.verify)
  File "c:\python27\lib\site-packages\requests\sessions.py", line 501, in get
    return self.request('GET', url, **kwargs)
  File "c:\python27\lib\site-packages\requests\sessions.py", line 474, in request
    prep = self.prepare_request(req)
  File "c:\python27\lib\site-packages\requests\sessions.py", line 385, in prepare_request
    cookies = cookiejar_from_dict(cookies)
  File "c:\python27\lib\site-packages\requests\cookies.py", line 518, in cookiejar_from_dict
    cookiejar.set_cookie(create_cookie(name, cookie_dict[name]))

And I really need to pass the cookie to the request, because otherwise it returns back only login page again.

Many thanks for any help!

like image 505
neliCZka Avatar asked Mar 09 '23 07:03

neliCZka


1 Answers

Sooo finally found the solution:

    Do Local Login  ${username}    ${password}
    ${cookie_value}=  Get Cookie Value  JSESSIONID
    ${dict}=  Create Dictionary   JSESSIONID=${cookie_value}
    Create Session  session1  https://oururl.com  verify=${False}  cookies=${dict}
    ${resp}=  Get request  session1  /somepage/request

Keyword Create Session works with the cookie, just the cookie must be passed not just as a cookie value, but dictionary JSESSIONID=${cookie_value}. Alternatively I don't have to pass the cookie in Create Session but in Get Request, just then I have to make the cookie as dictionary like ${dict}= Create Dictionary Cookie=JSESSIONID=${cookie_value} and this pass into Get request session1 /somepage/request headers=${dict}

like image 62
neliCZka Avatar answered Apr 26 '23 00:04

neliCZka