I’m sharing this tip, as it took me way too long to find a simple solution online, and as most of my articles, as a reminder of how to do this again in the future. After increasing security on my NodeRED server and certifying the server, I had to learn how to authenticate the HTTP requests with username and password and how to deal with HTTP vs HTTPS requests.

EventGhost basic authentication in HTTP|HTTPS requests

I’m submitting my data to the NodeRED server, which is password protected and SSL certified. This means I have to now include the basic authentication (username, password) in my few requests. I have put together a few lines of codes that make it easy for you guys to use, and obvious to read.

HTTP

To send the request – use the Python Script action and use the code below:

//HTTP POST request
import requests

username = "yourusername"                   ## your HTTP username
password = "secretpasswored"                ## your HTTP password
url = "http://192.168.1.xxx:1880/path"     ## NodeRED server address
data = {"light":1}                          ## some JSON formatted data

resp = requests.post(url, data, auth=(username, password))

HTTPS

To send the request – use the Python Script action and use the code below:

import requests
import warnings

#comment out the below line to get the Python warnings back
warnings.filterwarnings("ignore")

#set your credentials data
url = "https://192.168.1.xxx:1880/path"
username = "your username"
password = "your passowrd"
data = {"light":1}

#request the data & print it (comment out print later)
resp = requests.post(url, data, auth=(username, password), verify=False)

The code is simple, but if you are using a laptop, consider DNS rather than the IP for the NodeRED server. If you want to know why or what can you do with it, imagine linking a request like this to a keyboard macro.  You can use this to trigger lights, events or send notifications to other devices.

EventGhost Global Variables

Because the details of my server have changed, I had to redo all my HTTP requests. I don’t want to do this each time something changes. I figured out that I can set the global variables in EventGhost on start. Let’s do this so should anything happen I can change the values in a single script.

On boot, I want EvenGhost to load the default values which will be used later on in each script. We can do this by placing a Python script with the sensitive details in AutoStart:

#request the data & print it (comment out print later)
credentials = requests.get(url, auth=(username, password), verify=False)
print credentials.content

data = json.loads(credentials.content)


#Get JSON data  python username = data['JSON key']['key'] ie
#AutoRemote ID is stored as {"AR": "someID" }
#HTTP URL is stored in {"HTTP" :{"server":{"request":"URL FOR REQUEST"}}}

pixel = data['AR']
http = data['HTTP']['server']['request']

#store as global variable "test"|"test2", value
setattr(eg.globals, "test", pixel)
setattr(eg.globals, "test2", http)

print "***Default values loaded***"

These values will be loaded when EventGhost starts and the same HTTP post from before will this time look like that:

import requests
#setting username and password "HTTP_username"|"HTTP_password"|"HTTP_ip" are
#the name of the global variable
username = getattr(eg.globals, "HTTP_username")
password = getattr(eg.globals, "HTTP_password")

#composing a correct URL for HTTP
path = "/sonoff/relay/"
url = getattr(eg.globals, "HTTP_ip") + path

#adding data
data = {"light":0}

#sending a HTTP POST
resp = requests.post(url, data, auth=(username, password))

This way, if your IP or credentials change you have to modify only a single file.

I hope this tip on how EventGhost basic authentication in HTTP requests works will cut the googling time for you. If I can’t find a simple and well-explained answer within 3 pages of google searches it deserves an article. Even if it’s going to be a short one.

Support NotEnoughTech
A lot of time and effort goes into keeping NotEnoughTech alive! If my work helped you out, consider buying me a coffee or check out exclusive rewards available to Patreon supporters.
SHARE