LogicMachine Forum
Post Request with XML request body - Printable Version

+- LogicMachine 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!