iamacube

iamacube

I am using elixir - phoenix - tesla - third party api

I want to send a post request to the third party api and send the same parameter with two different values, which in the third party api documentation stated that it is possible to do it. but i want to remove the square brackets around the parameter.

Currentley I get this is what is being sent:

green=yes&blue=no&shades[]=300&shades[]=199`

the api sends a response that Parameter 'shades' is missing

i want it like this:

green=yes&blue=no&shades=300&shades=199`

this is my code using Tesla — tesla v1.20.0

    {:ok, response} = request(method: :post, url: "/edit", body: [green: "yes", blue: "no", shades: [List.first(shades), List.last(shades)]])

it works when sending one parameter in a map like this:

%{
      "green" => "yes,
      "blue" => "no",
      "shades" => 300
  }

but again I need to send two values at the same time, how do I achieve this?

Showing Posts 3 to 1

iamacube

iamacube OP

I want to admit that I am pretty new to elixir but after digging a little bit I managed to get it to work using this:

Plug Repository

  # covers non-keyword lists
  defp encode_pair(parent_field, list, encoder) when is_list(list) do
    mapper = fn
      value when is_map(value) and map_size(value) != 1 ->
        raise ArgumentError,
              "cannot encode maps inside lists when the map has 0 or more than 1 element, " <>
                "got: #{inspect(value)}"

      value ->
        [?&, encode_pair(parent_field <> "", value, encoder)]
    end

    list
    |> Enum.flat_map(mapper)
    |> prune()
  end

instead of [?&, encode_pair(parent_field <> "[]", value, encoder)] in last line, i just removed the [] like this: [?&, encode_pair(parent_field <> "", value, encoder)]

what I want to know if this is the right way to do it? and would this cause any issues noting that I am only going to be using it for this API call?

iamacube

iamacube OP

you are absolutley right! I am using

  plug(Tesla.Middleware.EncodeFormUrlencoded,
  encode: &Plug.Conn.Query.encode/1,
  decode: &Plug.Conn.Query.decode/1)

thank you for this information

brettbeatty

brettbeatty

It looks like you may have configured Tesla to use Plug.Conn.Query to encode the params, and it looks like it throws away repeat params, which is how I would have expected to get your thing to work.

I think what I would look at would be passing your own :encode option to Tesla.Middleware.FormUrlencoded that allows duplicates.

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
jaybe78
Hello, I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter). The diffic...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New
aseigo
ICal is a library for interacting with iCalendar data. It parses iCalendars into typed Elixir structs via ICal.from_ics, and can prepare ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews