Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
May 31, 2022 2:57:45 AM
Jan 4, 2019 9:22:35 AM
This article is a guide on how to call the Qlik Sense Repository API using Python.
The Qlik Sense Repository (QRS) API is a RESTful API, so in order to call it from Python, you would need to use a module such as requests
This can be simply installed using pip:
pip install requests
Create a python file test.py with the following contents (strings in red should be replaced to match your environment):
import requests requests.packages.urllib3.disable_warnings() #Set up necessary headers comma separated xrf = 'iX83QmNlvu87yyAB' headers = {'X-Qlik-xrfkey': xrf, "Content-Type": "application/json", "X-Qlik-User":"UserDirectory=DOMAIN;UserId=Administrator"} #Set up the certificate path cert = 'C:\certificates\clientandkey.pem' #Set the endpoint URL url = 'https://qlikserver1.domain.local:4242/qrs/app/full?xrfkey={}'.format(xrf) #Call the endpoint to get the list of Qlik Sense apps resp = requests.get(url, headers=headers, verify=False, cert=cert) if resp.status_code != 200: # Returns an error if something went wrong. raise ApiError('GET /qrs/app/full {}'.format(resp.status_code)) for app in resp.json(): print('{} {}'.format(app['id'], app['name']))
The clientandkey.pem file should look like below and contains both private key and certificate in pem format (Certificate and private key can be exported from QMC and it can be merged manually using a text editor)
-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAigl7uyMr9zdiyZ4UU99IA15qaR6YisrkAxOEDh9aC5xX8cKX mS++v6JjoIJCItLaAII19ubKylSLQZMfiYNMqKrKQIKH8VqgK8G5H/pAYkvpWuz+ MIp5cT4Xxg8sGNFFygHKVfbYPG6M7IXsqiuydKra1+wcgtqh0HrDfHRjzdImYCOB P8zfVVFc5CbVri8mvtbyWr4BYSNcxbacASXo8VQAi5KNHXn39CsfQUy1YmHckBUe vgMS6LwEks4WOY6FBGJ/0XeL2tgJYM85rHsnQNel5L2v5dVfJduZfOPojknjerZs GqMZH/zfj14E/e/p0r2ilOgGNAV56yJmnFou5wIDAQABAoIBAGDs28bBoaOLboBn 0Zo7FFPZPhrl8vKyGHzYfUd1WEMC2vXVT6Gu1t+05QPVsx7Es3Lb+4yM7iQ4TTgU WHa0jWV5116IyW/91K4k7xq3G/Jpn0fLVYk8Ep4jnYnjKXGbsMdxjmPiWl/EuIt0 VoP+/uXQ+q3XCwYPAsRjD1UaXOIt/rlRWvkr18Sx2OcReaFO7j83a/w61QSgVGN9 F5PA29s2KHPPLzsdFfM1Z9eYYQzySPd0Qh7J5lDtznbiaK2GwI+tTKDN6nAVgbkA OY4fmPyeijQckmcFxpEvJg4E7Spxx+VXmVMma/ro5karL/VrrsCm8h3g19vV0Jn4 zTKBkJECgYEAzq/9vs02FnspPTpcAWaJwrwG71aTqxTT2L/IM0s2BalNtURApO4/ QXJ0LRRenw867xifOLKdOMbRpn7jBYinRDmkbeXDLvhgoXALd50h+FZBhbfs3iRn uu02INvXTgDAUd63MiJKdey8DjET4vvn55AfONPmd2m0su89axFpTcsCgYEAqvh6 Sz1m2/xtXRAgva2uI2PPwqSIO/oPInLNiWIfMrXFrPc8hynU2QSmYnF3KCy/n1c7 i3BjocCEYMnp7spL1RbP79GWrsLvd/homVYo0rl0z0M4JPhEi0VxZO3vpaYqTi3X KGAna6mbiIc8jjeBVni/tY0kX2w8Nr8jZLXWv9UCgYEAklJNVRJ6RBgU7d+u2t74 kAAE+NNV3zvzbfL3jDimmgNtm/IhwaFY7sBUNsXA5uIlWrcXoU/xtgwqx6/0kCpa IBaerZ6HO21jG2by908qiWCnKj83VVx4gwED3OdF2Vb2z/7XuopEJI/f4jwkVAD6 ABkrwVNiSQ9weWydEntVDVkCgYAxeP1KUFY3SfALgeM3f85oBzXTSPDzCgTfHwFC w9XrQpYU2uX05rHkqmfLDLJCOdCpNwDP9JGf+KlVqJe8tWUEIDnDV46Wu2m3+XWr CTd+4pNedkEE0aJj+pA5eHBkKpULUlB0Kn69tLKA60EmlgEjGIXA7zqbMiKqZNzF A6lEkQKBgDJW2RiCRLgsfpWjlYU4ivJDRVA23Ns9LWgvNbYFd8IL1yjYerH+cbG0 8IJqIHjSzhKNgUkPI+Tz67bxBBbDkIr9Eo+GVr/L0ZDuAXZUG2z8M21OnKP5pXMq YgMneRqJgNQ3zeWgWwZSY+ud/0Y+UhB2nGZ++Nt9ZADcPi27g37E -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIDHTCCAgWgAwIBAgIQAPwSp1uUSsF/FUfzmrDGtzANBgkqhkiG9w0BAQsFADAm MSQwIgYDVQQDDBtRbGlrU2VydmVyMS5kb21haW4ubG9jYWwtQ0EwHhcNMTgwNzEw MDkzNzQ3WhcNMjgwNzE3MDkzNzQ3WjAVMRMwEQYDVQQDDApRbGlrQ2xpZW50MIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAigl7uyMr9zdiyZ4UU99IA15q aR6YisrkAxOEDh9aC5xX8cKXmS++v6JjoIJCItLaAII19ubKylSLQZMfiYNMqKrK QIKH8VqgK8G5H/pAYkvpWuz+MIp5cT4Xxg8sGNFFygHKVfbYPG6M7IXsqiuydKra 1+wcgtqh0HrDfHRjzdImYCOBP8zfVVFc5CbVri8mvtbyWr4BYSNcxbacASXo8VQA i5KNHXn39CsfQUy1YmHckBUevgMS6LwEks4WOY6FBGJ/0XeL2tgJYM85rHsnQNel 5L2v5dVfJduZfOPojknjerZsGqMZH/zfj14E/e/p0r2ilOgGNAV56yJmnFou5wID AQABo1gwVjAdBgNVHQ4EFgQUHuRgu4W91AWDpUV89iV40Dn06KMwHwYDVR0jBBgw FoAUWYVKKZg36ryR+h1omrSGo3ic+HowFAYIKwYBBQUHDQMECAQGQ2xpZW50MA0G CSqGSIb3DQEBCwUAA4IBAQA2gVHTFyXOsjs2Vr1/EqNvx//a5QM+xcBSUvTQXfzZ zoNofN0YCR5gc5SfS7ihf5R95MkrYXfKdhgCriqXVYExWiA0uPOLWsuMj9iaDJys 0494kUMA9UqiS+8AIfidCqkn4G1QpqtjEwPQMp3M2U3GkTkabQp6BB0Lf6srai6a ASk33xatdm8c8mf8sTemm3Iu2VDR02eX6gNeDdo4S1pmil1HsIPJKqDEwXvRY0nF kxedriyHdsXAz6Cb3stSl0szAeRuQ/B2UF3nW7VGMAjLiMFuDTLXai0539bzii0A 5rujJu/mt+wyljie0JUBfK1dvDCSSQUbHl4IEFGTX08b -----END CERTIFICATE-----
If you get an error involving certificates change the following line in the code
cert = 'C:\certificates\clientandkey.pem'
by
cert = ('C:/certificates/client.pem', 'C:/certificates/client_key.pem')
You will need to also install the following module to handle NTLM authentication:
pip install requests_ntlm
Create a python file test.py with the following contents (strings in red should be replaced to match your environment):
import requests from requests_ntlm import HttpNtlmAuth requests.packages.urllib3.disable_warnings() #Set up necessary headers comma separated xrf = 'iX83QmNlvu87yyAB' headers = {'X-Qlik-xrfkey': xrf, "Content-Type": "application/json", "User-Agent":"Windows"} #Set up user credentials user_auth = HttpNtlmAuth('domain\\user1','MyPassword') #add xrfkey to URL url = 'https://qlikserver1.domain.local/qrs/app/full?xrfkey={}'.format(xrf) #Call the endpoint to get the list of Qlik Sense apps resp = requests.get(url,headers = headers,verify=False,auth=user_auth) if resp.status_code != 200: # Returns an error if something went wrong. raise ApiError('GET /qrs/app/full {}'.format(resp.status_code)) for app in resp.json(): print('{1} {0}'.format(app['id'], app['name']))
Example of result obtained:
PS C:\certificates> python test.py 9b428869-0fba-4ba5-9f94-901ae2fdf041 test1 72e183c7-f838-4a8e-8e16-1014aa80acb4 License Monitor 38476273-ae47-475b-bee0-68cffa384ae1 Operations Monitor 9cdad10c-a230-4c78-b4f7-0d97ca30a48a testuser2 9fa859ed-b59c-4574-bf26-2620e09f1289 test1(1) d3c96fe7-2b3b-457a-82d7-2b32edbf4190 License Monitor_22.0.4.0 df32a902-bccb-4187-8c64-4223f6694f7c Operations Monitor_22.0.4.0
! The information in this article is provided as-is and to be used at own discretion. Ongoing support on the solution is not provided by Qlik Support.
Hi @Damien_V ,
this is an amazing article, which I have been able to use and works as expected. I have a question though:
We are using a third party server provider for our ssl certificate.
The question I have is using the PEM files, as per above i.e. Qlik default ones is the connection secure?
Or do we need to generate equivalent PEM files from our ssl certificate ?
Hello @cpra_qlik
In the current product design, it's not possible to replace the QlikClient certificate by a 3rd party generated certificate. The API can only be called by the QlikClient certificate generated by Qlik Sense itself.
@Damien_V will this approach work via the proxy server rather than direct to port 4242?
Yes, that's what option 2 is explaining if you scroll down in the article.
@Damien_V got it working now. Thanks
Hi @Damien_V ,
First at all thanks for sharing this example.
I'd like to know how to adapt your script to obtain the script for each app. I mean, I'd like to send the request below:
{
"handle": 1,
"method": "GetScript",
"params": {}
}
I understand your script is working with the Global object and to run the GetScript request I have to work with Doc object. The list of docs objects can be obtained from your script however I don't know how to request "GetScript".
Thanks
Hello @LDR
To receive more direct assistance with your customisation request, I would recommend posting about this in the correct forum (APIs and Intregations ).
All the best,
Sonja
I'll do that. However, so far I'm learning about Qlik APIs maybe REST APIs will be enough according my requirements.
Thanks for your point of view
@Damien_V Works perfectly. But how can I verify the certificates to avoid getting warnings all the time?
Hello @Damien_V ,
please do you know if it s possible to connect Python to Qlik Sense Enterprise?
I have some data sheets in some streams and I d like to access them automatically
thanks for your help