Successfully posting JSON w/ :httpc

I have a Phoenix api that needs to make a couple of post requests. I am fully aware that there are easier options for me than calling :httpc from erlang, but I started trying it out and now I’m curious as to why my request is working.

When I make the following request, the Flask API which I’m calling does not register any params being passed in the body. (Note: remember this is calling erlang in elixir and is not raw erlang)

:httpc.request(:post, {'https://thecorrecturl.com', [], 'application/json', 'any body at all'}, [], [])

To be clear, I am successfully hitting the endpoint, it’s just “any body at all” doesn’t get through. I’ve tried different variations of ‘{“key”:“value”}’ but nothing ever gets through (backslashed quotes, backslashed single quotes, nothing).

What am I missing to post this json body?

:wave:

iex(6)> :httpc.request(:post, {'http://httpbin.org/post', [], 'application/json', 'any body at all'}, [], [])
{:ok,
 {{'HTTP/1.1', 200, 'OK'},
  [
    {'connection', 'keep-alive'},
    {'date', 'Wed, 05 Sep 2018 05:38:54 GMT'},
    {'via', '1.1 vegur'},
    {'server', 'gunicorn/19.9.0'},
    {'content-length', '308'},
    {'content-type', 'application/json'},
    {'access-control-allow-origin', '*'},
    {'access-control-allow-credentials', 'true'}
  ],
  '{\n  "args": {}, \n  "data": "any body at all", \n  "files": {}, \n  "form": {}, \n  "headers": {\n    "Connection": "close", \n    "Content-Length": "15", \n    "Content-Type": "application/json", \n    "Host": "httpbin.org"\n  }, \n  "json": null, \n  "origin": "159.65.119.183", \n  "url": "http://httpbin.org/post"\n}\n'}}

works fine for me. You should probably check your flask app.

2 Likes

This is what I get for trying things when I have one foot out the door. I’ll be having a word with my python developer tomorrow lol (I don’t think request.get_json() is being used if I had to guess)