Question about httpPost

When I do an httpPost to a local address, I am assuming it doesn’t use my local network and I really need to address my devices with the IP given to me by the ISP and open ports on my router. That right?

Also, when I do this I am attempting to connect to my Roku, which I can do locally or using my ISP up using

curl -d ‘’ http://(ip):8060/

However when doing this in a smart app using http post I get a Forbidden response. Also, I have 9251 forwarded to 8060.

private sendKeyPressToLocalRoku(ip, keyPress, body = “”) {
def params = [
method: “POST”,
uri: “http://ip:9251/keypress/${keyPress}”,
contentType: “application/x-www-form-urlencoded”,
headers: [
body: body

try {
	httpPost(params) { resp ->
    return true
} catch(Exception e) {
    log(e, "ERROR")
    return false


Use hubAction, that works on the hub

Correct, httpPost is executed in the cloud, you need the public IP and port forwarding. HubAction on the other hand uses the hub to connect, so you can use the internal IP and no port forwarding needed. However, it cannot yet do HTTPS requests.

Ok, so the curl that works is…

curl -d ''

and here is my SmartApp code which does not…

`private sendKeyPressToRoku() {

def result = new physicalgraph.device.HubAction(
    method: "POST",
    path: "/keypress/home",
    headers: [
        HOST: ""

log("Result = ${result}.", "DEBUG")

return result


The value of result when done is…

POST /keypress/home HTTP/1.1 Accept: */* User-Agent: Linux UPnP/1.0 SmartThings HOST:

IPs have to be in hex value. See this old thread that helped me in the past:

1 Like

This isn’t a device that is “paired” to ST. It is just a roku on my local network. I tried hex, still didn’t work.

If you go to my github, look at the HomeCloudHub app, it uses HubAction, including SSDP discovery. You need to subscribe to location to get LAN packets.

Thanks guys, I kept following the thread that @ritchierich posted and the code in there from @geko worked.

1 Like