Question

I would like to make a Http POST request using json as a payload. I can't make it work.

With curl I would do like this (in fact, I tested it and it works):

curl -X POST -d @request http://localhost/jsonrpc --header "Content-Type:application/json"

With @request a file containing the json object to send.

I tried first with Http.request but it's making a weird request. I then tried with Http.post just to see if it works. The request then is fine but the Content-type is not json. Furthermore, in both case I have no response (this may be due to the server not sending anything but I can't verify it).

To know that I checked with my favorite browser's developer toolbar ;)

Using Http.request

It's using OPTIONS although I would like to use POST:

sendJson : Json.JsonValue -> Http.Request String
sendJson json = Http.request "POST" "http://localhost/jsonrpc" ( Json.toString " " json ) [("Content-Type", "application/json")]

{-
Request URL:http://localhost/jsonrpc
Request Method:OPTIONS
Status Code:200 OK

Request Headers:
OPTIONS /jsonrpc HTTP/1.1
Host: localhost
Connection: keep-alive
Cache-Control: max-age=0
Access-Control-Request-Method: POST
Origin: http://localhost:8000
Access-Control-Request-Headers: content-type
Accept: */*
Referer: http://localhost:8000/MyMovies.elm
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4,nl;q=0.2

HTTP/1.1 200 OK
Connection: close
Content-Length: 157677
Content-Type: application/json
Date: Mon, 30 Dec 2013 11:43:44 GMT
-}

Using Http.post

It's using text/plain although I would like to use application/json:

sendJson json = Http.post "http://localhost/jsonrpc" ( Json.toString " " json )

{-
Request URL:http://localhost/jsonrpc

Request Headers:
POST http://localhost/jsonrpc HTTP/1.1
Cache-Control: max-age=0
Origin: http://localhost:8000
Referer: http://localhost:8000/MyMovies.elm
Content-Type: text/plain;charset=UTF-8

Request payload:
{
 "params": {
  "sort": {
   "order": "ascending",
   "method": "label",
   "ignorearticle": true
  },
  "properties": [
   "art",
   "rating",
   "thumbnail",
   "playcount",
   "file"
  ]
 },
 "method": "VideoLibrary.GetMovies",
 "jsonrpc": "2.0"
}
-}

So, how can I send a POST request with a json payload ?

Was it helpful?

Solution

The answer is here: https://github.com/evancz/Elm/issues/426

TL;DR: This is normal behavior induced by CORS.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top