Logic Machine Forum
Post Request with XML request body - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: Post Request with XML request body (/showthread.php?tid=5493)



Post Request with XML request body - Hadeel - 03.07.2024

I am trying to send the following command to SONY Bravia TV with REST API request.
While I successfully sent the exact same command with XML request body with Postman,
when I try with LM I am getting 500 Internal Server Error.
Am I missing something in my code?

Code:
local http = require("socket.http")
local ltn12 = require("ltn12")

path =  'http://172.16.1.11/sony/ircc'
payload = [[<?xml version="1.0"?>
<s:Envelope
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
    s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <s:Body>
        <u:X_SendIRCC
            xmlns:u="urn:schemas-sony-com:service:IRCC:1">
            <IRCCCode>AAAAAgAAAJcAAAArAw==</IRCCCode>
        </u:X_SendIRCC>
    </s:Body>
</s:Envelope>]]

local response_body = { }
local res, code, response_headers, status = http.request
{
    url = path,
    method = "POST",
    headers =
    {
      ["Accept"] = "*/*",
      ["Host"] = "172.16.1.1",
      ["Content-Type"] = "application/xml",
      ["SOAPACTION"] = "urn:schemas-sony-com:service:IRCC:1#X_SendIRCC",
      ["X-Auth-PSK"] = "1707",
      ["Connection"] = "Keep-Alive",
      ["Content-Length"] = payload:len()
    },
   
    source = ltn12.source.string(payload),       
    sink = ltn12.sink.table(response_body)
}
log("Response:", table.concat(response_body))
log("Status:", status)
log("Code:", code)
log("Response Headers:", response_headers)
log("Result:", res)




The example code from SONY Bravia official is the follwoing.
https://pro-bravia.sony.net/ja/develop/integrate/ircc-ip/overview/index.html#authentication

Thank you for your help in advance!


RE: Post Request with XML request body - admin - 04.07.2024

Host header is not needed (it also does not match the IP of your TV).
Content-Type is different from the docs, should be text/xml; charset=UTF-8
Also try removing ["Connection"] = "Keep-Alive", as it's not supported by the library.

If it still does not work the try exporting Postman request that works in Curl format and post it here.


RE: Post Request with XML request body - Hadeel - 04.07.2024

Thank you admin!
I removed Host, Connection headers and changed Content-Type but it is not working...

This is the Curl request that works successfully.


Code:
curl --location 'http://172.16.1.11/sony/ircc' \
--header 'X-Auth-PSK: 1707' \
--header 'SOAPACTION: "urn:schemas-sony-com:service:IRCC:1#X_SendIRCC"' \
--header 'Content-Type: application/xml' \
--data '<?xml version="1.0"?>
<s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
    s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:X_SendIRCC
xmlns:u="urn:schemas-sony-com:service:IRCC:1">
<IRCCCode>AAAAAgAAAKQAAABbAw==</IRCCCode>
</u:X_SendIRCC>
</s:Body>
</s:Envelope>'



RE: Post Request with XML request body - admin - 04.07.2024

Looks like SOAPACTION header value must be also contain double quotes:
Code:
["SOAPACTION"] = [["urn:schemas-sony-com:service:IRCC:1#X_SendIRCC"]],

Not sure if it matters but your script has a different IRCCCode value compared to the Postman/Curl.


RE: Post Request with XML request body - Hadeel - 04.07.2024

Ohhh exactly, it worked ..... !!
Thank you so much for your quick help!!
Oh yes I am trying with several IRCCCode but they all work now....appreciate you a lot as always!