This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

JSON post request being weird
#1
Hi,
I've garbled a script I found, but for some reason my API is refusing the JSON content.
Maybe I've got a typo or I'm just slow..

Here is my current code:
Code:
require('socket.http')
require('json')
require("ltn12")
body = '{"fault": true,"instID": "string","value": 0,"name": "string"}'
response = {}
start = grp.getvalue('12/4/0')

socket.http.request({
      url = "http://192.168.1.69/docs",
   method = 'POST',
     sink = ltn12.sink.table(response),
  headers = {
        ['accept'] = 'application/json',
     ['content-type'] = 'application/json',
            },
      source = ltn12.source.string(body),
        })
log(response,headers)
That results in this: 
Code:
string: {"detail":[{"type":"missing","loc":["body"],"msg":"Field required","input":null}]}


Which I could probably live with as it's just missing some or all values in the JSON format, but I decided to try it through CURL and that works and returns 201 success:
Code:
curl -X 'POST' \
  'http://192.168.1.69/docs' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{"fault": true,"instID": "string","value": 0,"name": "string"}'
I've tried enclosing "true" and "0" in " but that doesn't make a difference.


Any ideas would be greatly appreciated.
Reply
#2
You are missing the content-length header. It is also advisable to use json.encode to create JSON strings instead of manual creation which can lead to errors.
Reply
#3
(21.09.2023, 05:06)admin Wrote: You are missing the content-length header. It is also advisable to use json.encode to create JSON strings instead of manual creation which can lead to errors.

I've added the header, with it in I get a internal server error Sad 

This should be correct, right?
Code:
mac = io.readfile('/sys/class/net/eth0/address'):trim()
require('socket.http')
require('json')
require("ltn12")
jsoncontent = json.encode({fault = true,instID= "teststring",value= 22,name = "stringname"})

body = jsoncontent
response = {}
log("test")

socket.http.request({
      url = "http://192.168.1.69/docs",
   method = 'POST',
     sink = ltn12.sink.table(response),
  headers = {
     ["Content-Length"] = string.len(body),
        ['accept'] = 'application/json',
     ['content-type'] = 'application/json',
            },
      source = ltn12.source.string(body),
        })
log(response,body)
Reply
#4
Check error logs on your server. This request works correctly when testing with https://httpbin.org/post
Reply
#5
(21.09.2023, 08:28)admin Wrote: Check error logs on your server. This request works correctly when testing with https://httpbin.org/post

You are correct, had a imported library on my server that made some issues.
Reply


Forum Jump: