# HTTP Request formurlencoded problem

**URL:** <https://forum.elixirforum.com/t/http-request-formurlencoded-problem/32465>\
**Category:** Questions\
**Tags:** elixir-httpoison\
**Created:** [June 18, 2020, 8:50pm UTC](https://forum.elixirforum.com/t/http-request-formurlencoded-problem/32465 "2020-06-18T20:50:44Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![rayandfz](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/rayandfz/32/19590_2.png) [@rayandfz](https://forum.elixirforum.com/u/rayandfz)\
**Post date:** [June 18, 2020, 8:50pm UTC](https://forum.elixirforum.com/t/http-request-formurlencoded-problem/32465/1 "2020-06-18T20:50:44Z")

</div>

Hello,

I’m new to Elixir and I come from the world Javascript

To learn the language, I decided to redo a reverse API that I had done a few days ago in JS.

```js
import fetch from 'node-fetch' 

export default class Authentification {
    async login() {
        return (await fetch("https://api.ecoledirecte.com/v3/login.awp", {
            "headers": {
                "accept": "application/json, text/plain, */*",
                "accept-language": "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7",
                "content-type": "application/x-www-form-urlencoded",
                "sec-fetch-dest": "empty",
                "sec-fetch-mode": "cors",
                "sec-fetch-site": "same-site"
            },
            "referrer": "https://www.ecoledirecte.com/login",
            "referrerPolicy": "no-referrer-when-downgrade",
            "body": "data={\n \"identifiant\": \"" + process.env.USERNAME + "\",\n \"motdepasse\": \"" + process.env.PASSWORD + "\"\n}",
            "method": "POST",
            "mode": "cors"
        })).json()
    }
}

```

My problem being that I’m trying to do a code style but I get an error message from the api telling me that the body is incorrect, I don’t really know how to do it, could you direct me?

Would you have a good resource to understand Elixir and the OTP? I come from the imperative world and I have a lot of pain making effective code in Elixir.

```elixir
  def main() do
       HTTPoison.post "https://api.ecoledirecte.com/v3/login.awp", "{\"body\": data={\"identifiant\": \"secret\"\n \"motdepasse\": \"secret\"\n}}", [{"Content-Type", "application/x-www-form-urlencoded"}]
  end

```

---

<div class="post-metadata">

**Author:** ![dimitarvp](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/32/38664_2.png) [@dimitarvp](https://forum.elixirforum.com/u/dimitarvp)\
**Post date:** [June 19, 2020, 12:14pm UTC](https://forum.elixirforum.com/t/http-request-formurlencoded-problem/32465/2 "2020-06-19T12:14:28Z")

</div>

I would first try and reproduce your Node.JS code with `curl` on the command line. It helps establish a baseline with which to compare.

That being said, I noticed that in your Node code you have `process.env.USERNAME` as a value for `"identifiant"` and that you hardcoded `""` secret for its value in the Elixir code. Are both identical? (Same goes for `"password"`). Of course, don’t post users and passwords here, I am just making sure.

---

<div class="post-metadata">

**Author:** ![rayandfz](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/rayandfz/32/19590_2.png) [@rayandfz](https://forum.elixirforum.com/u/rayandfz)\
**Post date:** [June 19, 2020, 9:28pm UTC](https://forum.elixirforum.com/t/http-request-formurlencoded-problem/32465/3 "2020-06-19T21:28:13Z")

</div>

Hi!

```js
process.env.USERNAME == "SECRET" // true 

```

---

<div class="post-metadata">

**Author:** ![al2o3cr](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/al2o3cr/32/3457_2.png) [@al2o3cr](https://forum.elixirforum.com/u/al2o3cr)\
**Post date:** [June 19, 2020, 9:43pm UTC](https://forum.elixirforum.com/t/http-request-formurlencoded-problem/32465/4 "2020-06-19T21:43:47Z")

</div>

> [@rayandfz](#):
>
> ```elixir
> "{\"body\": data={\"identifiant\": \"secret\"\n \"motdepasse\": \"secret\"\n}}"
> 
> ```

I don’t think you want the `body` part here - that was from the JS, not something that should be sent to the API.

The `data=` bit here is weird, but matches the observed behavior and the behavior described in this post:

> <https://stackoverflow.com/questions/57896219/how-can-i-scrape-a-password-protected-website-with-beautifulsoup-and-requests>

The format this is expecting is odd; it appears to be a URL-encoded payload containing exactly one key `data` containing incompletely-escaped JSON. Prettified from that login page’s source:

```elixir
        if (config.data && "object" == typeof config.data) {
            config.data.token = $sessionStorage.token;
            var replacer = function(key, value) {
                return "string" == typeof value ? (value = value.replace(/%/g, "%25"),
                value = value.replace(/&/g, "%26"),
                value = value.replace(/\+/g, "%2B")) : value
            }
              , strVal = JSON.stringify(config.data, replacer, 4);
            config.data = "data=" + strVal
        }

```
