Splunk Dev

What is the correct way to POST data to a custom endpoint and handle it in a python script ?

twesthead
Path Finder

Dear Splunk genie,

I have configured a custom REST endpoint with a Python script.
When I call my endpoint with fields in the query string I am able to read them in my Python script.
However, if I try to use the POST method with data in the request body, I can't access this data in my Python script.

What is the correct way to POST data to a custom endpoint and handle it in a python script ?

This is my code so far :

Below : my_app/local/web.conf (Holds a stanza with the name of my endpoint)

[endpoint:my_script]

Below : my_app/appserver/controllers/my_script.py (Holds my script, with name matching the endpoint)

import splunk.appserver.mrsparkle.controllers as controllers
from splunk.appserver.mrsparkle.lib.decorators import expose_page

class Controller(controllers.BaseController):
    @expose_page(must_login=False) 
    def my_function(self, **kwargs) :
        arg1 = kwargs.get('arg1', 'default_val_arg1')
        arg2 = kwargs.get('arg2', 'default_val_arg2')
        return arg1 + arg2

Now using a REST client.
GET on the following url returns "onetwo", which is good.

http://localhost:8000/en-US/custom/my_app/my_script/my_function?arg1=one&arg2=two

POST on the following url returns "default_val_arg1default_val_arg2"
With Content-type : application/x-www-form-urlencoded
And Body : arg1=one&arg2=two

http://localhost:8000/en-US/custom/my_app/my_script/my_function
0 Karma
1 Solution

twesthead
Path Finder

I fixed this by specifying the HTTP POST method in the decorators.

@expose_page(must_login=False, methods=['POST']) 

If you don't, the method defaults to GET and doesn't read parameters from the body.
Also don't forget to specify a locale like en-US in the URL or else you will be slapped by a 405 Method Not Allowed error.

View solution in original post

0 Karma

twesthead
Path Finder

I fixed this by specifying the HTTP POST method in the decorators.

@expose_page(must_login=False, methods=['POST']) 

If you don't, the method defaults to GET and doesn't read parameters from the body.
Also don't forget to specify a locale like en-US in the URL or else you will be slapped by a 405 Method Not Allowed error.

0 Karma
Get Updates on the Splunk Community!

Announcing the Expansion of the Splunk Academic Alliance Program

The Splunk Community is more than just an online forum — it’s a network of passionate users, administrators, ...

Learn Splunk Insider Insights, Do More With Gen AI, & Find 20+ New Use Cases You Can ...

Splunk Lantern is a Splunk customer success center that provides advice from Splunk experts on valuable data ...

Buttercup Games: Further Dashboarding Techniques (Part 7)

This series of blogs assumes you have already completed the Splunk Enterprise Search Tutorial as it uses the ...