Logic Machine Forum
http request - 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: http request (/showthread.php?tid=2296)



http request - Angeles - 21.10.2019

Hi:

I'm trying to extract data from Mitsubishi Web Server - SC-SL4

The data to request is:

mensaje = ='<Packet> \r\n' ..
  <Command>getRequest</Command> \r\n' ..
  <AirConditioner> \r\n' ..
    <OpGroup GrNo="1" OnOff="*" Mode="*" ErrorStatus="*"></OpGroup>\r\n' ..
     </AirConditioner> \r\n' ..
</Packet>\r\n' ..


The server response 'error 400: syntax error

This is my code:

Content = string.len(mensaje)
soap = '<?xml version="1.0" encoding="UTF-8"?>'


-- http request 
reqs = 'POST /servlet/MIMEReceiveServlet.asp HTTP/1.1\r\n'..
'Content-Type: text/xml\r\n'..
'Content-Length: '..Content..'\r\n' ..
'\r\n' ..
soap..'\r\n' ..mensaje

sock = socket.tcp()
sockConfusedettimeout(70)

res, err = sock:connect(ip, port)
log(res,err)

if res then
res, err = sockConfusedend(reqs)

  if res then
    log('send OK ')
  else
    log('send failed: ' .. tostring(err))
  end
else
  log('connect failed: ' .. tostring(err))
end
 
res2, err2 = sock:receive("*a")
sock:close()

log(res2,err2)


The result is nil. We have another installation with another server and LMReactor and it works perfectly.

In this isntallation we have is with LMAmbient


RE: http request - admin - 21.10.2019

Try this, your content-length header does not include initial XML line.
Edit: you are missing Host and Connection headers.
Code:
data =
'<?xml version="1.0" encoding="UTF-8"?>\r\n' ..
'<Packet>\r\n' ..
'<Command>getRequest</Command>\r\n' ..
'<AirConditioner>\r\n' ..
'<OpGroup GrNo="1" OnOff="*" Mode="*" ErrorStatus="*"></OpGroup>\r\n' ..
'</AirConditioner>\r\n' ..
'</Packet>'

-- http request  
reqs = 'POST /servlet/MIMEReceiveServlet.asp HTTP/1.1\r\n'..
'Content-Type: text/xml\r\n'..
'Host: ' .. ip .. '\r\n' ..
'Connection: close\r\n' ..
'Content-Length: '.. #data..'\r\n\r\n' ..
data

sock = socket.tcp()
sock:settimeout(70)

res, err = sock:connect(ip, port)
log(res,err)

if res then
  res, err = sock:send(reqs)

  if res then
    log('send OK')
    
    res2, err2 = sock:receive("*a")
    sock:close()

    log(res2,err2)
  else
    log('send failed: ' .. tostring(err))
  end
else
  log('connect failed: ' .. tostring(err))
end



RE: http request - Angeles - 21.10.2019

sorry I know that it's necessary include the HOST with HTTP/1.1, I tried everything and I have transcribed it badly.
The xml line is in soap variable.