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 1 to 3

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.

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

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?

— 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
jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
spammy
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
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
dli
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app? Looking for hints regarding: Addi...
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
bottlenecked
Hi all, I wanted to ask how the community is dealing with post-release steps. Today we have Ecto migrations, which make sure that the db...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
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
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
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
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews