I have configured my REST API custom endpoint within a new app, and tested successfully through the service web's UI (:8089). But got 404 from javascript. Splunk version: 7.2.0, User account has admin role:
service.post('services/my_submit', data, function...
http://mysplunk:8000/en-US/splunkd/__raw/services/my_submit?output_mode=json 404 (Not Found)
Accessing from service port prints 'success' from the python script:
https://mysplunk:8089/services/my_submit
web.xml:
[expose:my_submit]
pattern=my_submit
methods=POST
restmap.conf:
[script:my_submit]
match=/my_submit
handler=my_submit.Submit
my_submit.py:
import splunk
class Submit(splunk.rest.BaseRestHandler):
def handle_submit(self):
try:
self.response.setHeader('content-type', 'text/html')
self.response.write('success')
except:
self.response.setHeader('content-type', 'text/html')
self.response.write('<p>Uh oh! Something wrong!</p>')
handle_GET = handle_submit
Should I use 'services/my_submit' as the endpoint in the service call? What else could I miss? Your help is greatly appreciated.
Tony
After correcting GET/POST, I realized the problem was that the file name should be web.conf, not web.xml.
After correcting GET/POST, I realized the problem was that the file name should be web.conf, not web.xml.
seems that you are mixing Get and Post.
try:
web.xml:
methods=POST,GET
my_submit.py:
handle_GET = handle_POST = handle_submit
and try both js methods:
service.post(...) and service.get(...)
Thanks lweber. I can see missing handle_POST in python would be a problem. If I replace handle_GET with handle_POST only, I got a specific python error (object has no attribute 'handle_GET' ) on port 8089 web. Now I have both as you suggested, and added to web.xml, but still gets 404 error regardless I do service.get or service.post. I can do curl with -XPOST to get the correct response from port 8089.