Support Questions
Find answers, ask questions, and share your expertise

Nifi InvokeHTTP to get a token from an API

I have curl command as below.

curl -s -XPOST -H "Accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -d 'username=usco&password=asdl2342&client_id=dwer234324-2sd2-32dwq&scope=read' 'https://rest.abc.com/security'

I am trying to replicate this in Nifi. I am trying to figure out how and where the above options to be provided in InvokeHTTP processor. I have gone through the articles and some mentioned I have to define it in body of flow file. But I couldn't understand what exactly goes into body and what goes into extra attributes (if I need to add) in InvokeHTTP processsor.

1 ACCEPTED SOLUTION

Accepted Solutions

@RC

Here is what I think you should use to make this work:

-X POST use processor HTTP method attribute and set to POST
-x http://proxyhost:portI think you should consider adding this configuration or add properties Proxy host=proxyhost, Proxy port=port and Proxy protocol=https
-H "Accept: application/json"Use the Attributes to send referencing a new attribute with the value (add 1 extra attributes with corresponding value)
-H "Content-Type: application/x-www-form-urlencoded"Use Content type attribute
-d 'data sent'Send Message Body = true. And the content should come as inbound flowfile to the processor. To test try adding a GenerateFlowFile processor with the content without single quotes
https://hostname/security/v1/oauth/tokenSet in Remote url

Finally since endpoint is ssl enabled you need to set SSL Context Service.

HTH

*** If you found this answer addressed your question, please take a moment to login and click the "accept" link on the answer.

View solution in original post

5 REPLIES 5

@RC

Here is what I think you should use to make this work:

-X POST use processor HTTP method attribute and set to POST
-x http://proxyhost:portI think you should consider adding this configuration or add properties Proxy host=proxyhost, Proxy port=port and Proxy protocol=https
-H "Accept: application/json"Use the Attributes to send referencing a new attribute with the value (add 1 extra attributes with corresponding value)
-H "Content-Type: application/x-www-form-urlencoded"Use Content type attribute
-d 'data sent'Send Message Body = true. And the content should come as inbound flowfile to the processor. To test try adding a GenerateFlowFile processor with the content without single quotes
https://hostname/security/v1/oauth/tokenSet in Remote url

Finally since endpoint is ssl enabled you need to set SSL Context Service.

HTH

*** If you found this answer addressed your question, please take a moment to login and click the "accept" link on the answer.

View solution in original post

Explorer

Attached is the screenshot for the solution 

E2E  FlowE2E FlowGenerate Flow FileGenerate Flow FileInvokeHttp.InvokeHttp.

@Felix Albani

Thank you very much. that worked perfectly. I have one more question. What if I have one more header such as -H "Authorization: Bearer 27ffdfada34982-1123qwdq2" . How do I send it ?
Should I be adding one more property and set the name as 'Authorization and Value as Bearer 27ffdfada34982-1123qwdq2 ?

or

Can I specify more than one attribute in AttributestoSend in InvokeHTTP processor ? If yes, should they be seperated by comma or space or something else ?

@RC Based on the documentation is a regular expression:

Regular expression that defines which attributes to send as HTTP headers in the request.

perhaps you can name your list of attributes:

httpheader1<br>httpheader2<br>httpheaderN

then use a regex like this httpheader[1-N]

HTH

I have added Accept and Authorization in UpdateAttribute processor before InovkeHTTP processor and in the Attributes to Send property (in InovkeHTTP) - I have used .*