<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Setting a webhook alert via a proxy server in Alerting</title>
    <link>https://community.splunk.com/t5/Alerting/Setting-a-webhook-alert-via-a-proxy-server/m-p/317821#M11963</link>
    <description>&lt;P&gt;The &lt;CODE&gt;webhook.py&lt;/CODE&gt; script doesn't take into account proxies.  You can replace &lt;CODE&gt;/opt/splunk/etc/apps/alert_webhook/webhook.py&lt;/CODE&gt; with the following, and configure the proxy instead of the existing &lt;CODE&gt;127.0.0.1&lt;/CODE&gt;. &lt;/P&gt;

&lt;PRE&gt;&lt;CODE&gt;import sys
import json
import urllib2
import csv
import gzip
from collections import OrderedDict


def send_webhook_request(url, body, user_agent=None):
    if url is None:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR No URL provided"
        return False
    print &amp;gt;&amp;gt; sys.stderr, "INFO Sending POST request to url=%s with size=%d bytes payload" % (url, len(body))
    print &amp;gt;&amp;gt; sys.stderr, "DEBUG Body: %s" % body
    try:
        # sduff - install proxy handler
        proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
        opener = urllib2.build_opener(proxy)
        urllib2.install_opener(opener)
        # sduff - end of proxy handler code

        req = urllib2.Request(url, body, {"Content-Type": "application/json", "User-Agent": user_agent})
        res = urllib2.urlopen(req)
        if 200 &amp;lt;= res.code &amp;lt; 300:
            print &amp;gt;&amp;gt; sys.stderr, "INFO Webhook receiver responded with HTTP status=%d" % res.code
            return True
        else:
            print &amp;gt;&amp;gt; sys.stderr, "ERROR Webhook receiver responded with HTTP status=%d" % res.code
            return False
    except urllib2.HTTPError, e:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR Error sending webhook request: %s" % e
    except urllib2.URLError, e:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR Error sending webhook request: %s" % e
    except ValueError, e:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR Invalid URL: %s" % e
    return False


if __name__ == "__main__":
    if len(sys.argv) &amp;lt; 2 or sys.argv[1] != "--execute":
        print &amp;gt;&amp;gt; sys.stderr, "FATAL Unsupported execution mode (expected --execute flag)"
        sys.exit(1)
    try:
        settings = json.loads(sys.stdin.read())
        url = settings['configuration'].get('url')
        body = OrderedDict(
            sid=settings.get('sid'),
            search_name=settings.get('search_name'),
            app=settings.get('app'),
            owner=settings.get('owner'),
            results_link=settings.get('results_link'),
            result=settings.get('result')
        )
        user_agent = settings['configuration'].get('user_agent', 'Splunk')
        if not send_webhook_request(url, json.dumps(body), user_agent=user_agent):
            sys.exit(2)
    except Exception, e:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR Unexpected error: %s" % e
sys.exit(3)
&lt;/CODE&gt;&lt;/PRE&gt;

&lt;P&gt;I'll chase internally to see if this can be updated, and also made to use the proxy set in Splunk, or at least, the Environment variables.&lt;BR /&gt;
(I'll post updates to &lt;A href="https://gist.github.com/sduff/3c461f05f907ebd08e7f128237705a0f"&gt;https://gist.github.com/sduff/3c461f05f907ebd08e7f128237705a0f&lt;/A&gt;) &lt;/P&gt;</description>
    <pubDate>Fri, 12 Oct 2018 05:44:47 GMT</pubDate>
    <dc:creator>sduff_splunk</dc:creator>
    <dc:date>2018-10-12T05:44:47Z</dc:date>
    <item>
      <title>Setting a webhook alert via a proxy server</title>
      <link>https://community.splunk.com/t5/Alerting/Setting-a-webhook-alert-via-a-proxy-server/m-p/317820#M11962</link>
      <description>&lt;P&gt;I'm trying to set up a webhook alert, but the splunk server cannot contact the HTTP endpoint directly and must talk HTTP via a proxy server.  Is it possible to configure splunk to use a HTTP proxy? &lt;/P&gt;</description>
      <pubDate>Tue, 11 Apr 2017 05:39:41 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Alerting/Setting-a-webhook-alert-via-a-proxy-server/m-p/317820#M11962</guid>
      <dc:creator>stepowsk</dc:creator>
      <dc:date>2017-04-11T05:39:41Z</dc:date>
    </item>
    <item>
      <title>Re: Setting a webhook alert via a proxy server</title>
      <link>https://community.splunk.com/t5/Alerting/Setting-a-webhook-alert-via-a-proxy-server/m-p/317821#M11963</link>
      <description>&lt;P&gt;The &lt;CODE&gt;webhook.py&lt;/CODE&gt; script doesn't take into account proxies.  You can replace &lt;CODE&gt;/opt/splunk/etc/apps/alert_webhook/webhook.py&lt;/CODE&gt; with the following, and configure the proxy instead of the existing &lt;CODE&gt;127.0.0.1&lt;/CODE&gt;. &lt;/P&gt;

&lt;PRE&gt;&lt;CODE&gt;import sys
import json
import urllib2
import csv
import gzip
from collections import OrderedDict


def send_webhook_request(url, body, user_agent=None):
    if url is None:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR No URL provided"
        return False
    print &amp;gt;&amp;gt; sys.stderr, "INFO Sending POST request to url=%s with size=%d bytes payload" % (url, len(body))
    print &amp;gt;&amp;gt; sys.stderr, "DEBUG Body: %s" % body
    try:
        # sduff - install proxy handler
        proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
        opener = urllib2.build_opener(proxy)
        urllib2.install_opener(opener)
        # sduff - end of proxy handler code

        req = urllib2.Request(url, body, {"Content-Type": "application/json", "User-Agent": user_agent})
        res = urllib2.urlopen(req)
        if 200 &amp;lt;= res.code &amp;lt; 300:
            print &amp;gt;&amp;gt; sys.stderr, "INFO Webhook receiver responded with HTTP status=%d" % res.code
            return True
        else:
            print &amp;gt;&amp;gt; sys.stderr, "ERROR Webhook receiver responded with HTTP status=%d" % res.code
            return False
    except urllib2.HTTPError, e:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR Error sending webhook request: %s" % e
    except urllib2.URLError, e:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR Error sending webhook request: %s" % e
    except ValueError, e:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR Invalid URL: %s" % e
    return False


if __name__ == "__main__":
    if len(sys.argv) &amp;lt; 2 or sys.argv[1] != "--execute":
        print &amp;gt;&amp;gt; sys.stderr, "FATAL Unsupported execution mode (expected --execute flag)"
        sys.exit(1)
    try:
        settings = json.loads(sys.stdin.read())
        url = settings['configuration'].get('url')
        body = OrderedDict(
            sid=settings.get('sid'),
            search_name=settings.get('search_name'),
            app=settings.get('app'),
            owner=settings.get('owner'),
            results_link=settings.get('results_link'),
            result=settings.get('result')
        )
        user_agent = settings['configuration'].get('user_agent', 'Splunk')
        if not send_webhook_request(url, json.dumps(body), user_agent=user_agent):
            sys.exit(2)
    except Exception, e:
        print &amp;gt;&amp;gt; sys.stderr, "ERROR Unexpected error: %s" % e
sys.exit(3)
&lt;/CODE&gt;&lt;/PRE&gt;

&lt;P&gt;I'll chase internally to see if this can be updated, and also made to use the proxy set in Splunk, or at least, the Environment variables.&lt;BR /&gt;
(I'll post updates to &lt;A href="https://gist.github.com/sduff/3c461f05f907ebd08e7f128237705a0f"&gt;https://gist.github.com/sduff/3c461f05f907ebd08e7f128237705a0f&lt;/A&gt;) &lt;/P&gt;</description>
      <pubDate>Fri, 12 Oct 2018 05:44:47 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Alerting/Setting-a-webhook-alert-via-a-proxy-server/m-p/317821#M11963</guid>
      <dc:creator>sduff_splunk</dc:creator>
      <dc:date>2018-10-12T05:44:47Z</dc:date>
    </item>
    <item>
      <title>Re: Setting a webhook alert via a proxy server</title>
      <link>https://community.splunk.com/t5/Alerting/Setting-a-webhook-alert-via-a-proxy-server/m-p/582562#M13435</link>
      <description>&lt;P&gt;I recently had to deal with this too and found this answer, but it's out of date of the current webhook.py.&amp;nbsp; I figured having a more recent example that is python3 compatible would be beneficial.&amp;nbsp; Replace 127.0.0.1 with the proxy host you need to use.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;import sys
import json
import csv
import gzip
from collections import OrderedDict
from future.moves.urllib.request import urlopen, Request, ProxyHandler, build_opener, install_opener
from future.moves.urllib.error import HTTPError, URLError

def send_webhook_request(url, body, user_agent=None):
    if url is None:
        sys.stderr.write("ERROR No URL provided\n")
        return False
    sys.stderr.write("INFO Sending POST request to url=%s with size=%d bytes payload\n" % (url, len(body)))
    sys.stderr.write("DEBUG Body: %s\n" % body)
    try:
        proxy = ProxyHandler({'http': 'http://127.0.0.1:80', 'https': 'https://127.0.0.1:80'})
        opener = build_opener(proxy)
        install_opener(opener)
        if sys.version_info &amp;gt;= (3, 0) and type(body) == str:
            body = body.encode()
        req = Request(url, body, {"Content-Type": "application/json", "User-Agent": user_agent})
        res = urlopen(req)
        if 200 &amp;lt;= res.code &amp;lt; 300:
            sys.stderr.write("INFO Webhook receiver responded with HTTP status=%d\n" % res.code)
            return True
        else:
            sys.stderr.write("ERROR Webhook receiver responded with HTTP status=%d\n" % res.code)
            return False
    except HTTPError as e:
        sys.stderr.write("ERROR Error sending webhook request: %s\n" % e)
    except URLError as e:
        sys.stderr.write("ERROR Error sending webhook request: %s\n" % e)
    except ValueError as e:
        sys.stderr.write("ERROR Invalid URL: %s\n" % e)
    return False


if __name__ == "__main__":
    if len(sys.argv) &amp;lt; 2 or sys.argv[1] != "--execute":
        sys.stderr.write("FATAL Unsupported execution mode (expected --execute flag)\n")
        sys.exit(1)
    try:
        settings = json.loads(sys.stdin.read())
        url = settings['configuration'].get('url')
        body = OrderedDict(
            sid=settings.get('sid'),
            search_name=settings.get('search_name'),
            app=settings.get('app'),
            owner=settings.get('owner'),
            results_link=settings.get('results_link'),
            result=settings.get('result')
        )
        user_agent = settings['configuration'].get('user_agent', 'Splunk')
        if not send_webhook_request(url, json.dumps(body), user_agent=user_agent):
            sys.exit(2)
    except Exception as e:
        sys.stderr.write("ERROR Unexpected error: %s\n" % e)
        sys.exit(3)&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 07 Feb 2022 13:59:52 GMT</pubDate>
      <guid>https://community.splunk.com/t5/Alerting/Setting-a-webhook-alert-via-a-proxy-server/m-p/582562#M13435</guid>
      <dc:creator>dmarling</dc:creator>
      <dc:date>2022-02-07T13:59:52Z</dc:date>
    </item>
  </channel>
</rss>

