dnkbln
Req.get redirects and special characters
I use the Req library to download a resource. I got the resource from a podcast RSS feed.
enclosure_url = "https://example.com/file 1.mp3"
{:ok, resp} = Req.get(enclosure_url)
I got an error from the Req library. I added an encode Url step, but the resource has some redirects to the final location and in the redirects contains also special characters (eq. a blank).
enclosure_url = "https://example.com/file 1.mp3"
encode_url = URI.encode(enclosure_url)
{:ok, resp} = Req.get(encode_url)
https://example.com/file 1.mp3 → https://cdn.example.com/file 1.mp3
How could I solve this problem?
Remark: I hope the question is not stupid. I’m just starting out with Elixir programming.
I used Elixir with the Req library and without Phoenix.
Most Liked
wojtekmach
Hex Core Team
This is a bug in Req, we should be calling your request steps when making the redirect. I’d have to track the history how we ended up there but FWIW here’s a minimal reproduction:
Mix.install([
{:req, path: "~/src/req"},
:bandit
])
{:ok, _} =
Bandit.start_link(
plug: fn
conn, _ when conn.request_path == "/" ->
conn
|> Plug.Conn.put_resp_header("location", "/foo bar")
|> Plug.Conn.send_resp(301, "redirecting")
conn, _ when conn.request_path == "/foo%20bar" ->
Plug.Conn.send_resp(conn, 200, "ok")
end,
port: 8000
)
Req.new()
|> Req.Request.prepend_request_steps(
encode_url: fn r ->
dbg(:encode_url)
update_in(r.url.path, &(&1 && URI.encode(&1)))
end
)
|> Req.get!(url: "http://localhost:8000")
and here’s a fix:
diff --git a/lib/req/steps.ex b/lib/req/steps.ex
index 33e332e..8e8fc73 100644
--- a/lib/req/steps.ex
+++ b/lib/req/steps.ex
@@ -1813,6 +1813,8 @@ defmodule Req.Steps do
|> build_redirect_request(response, location)
|> Req.Request.put_private(:req_redirect_count, redirect_count + 1)
+ request = put_in(request.current_request_steps, Keyword.keys(request.request_steps))
+
{request, response_or_exception} = Req.Request.run_request(request)
Req.Request.halt(request, response_or_exception)
else
Stay tuned!
4
Popular in Questions
Hi All,
I set a environment variables in dev.exs , like below code.
when i start server, how can i set the ${enable} value?
thanks.
d...
New
In Ruby, I can go:
User.find_by(email: "foobar@email.com").update(email: "hello@email.com")
How can I do something similar in Elixir?
...
New
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible.
total = 10
while total != 0
...
New
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]
15:22:35.803 [error] gen_event {lager_file_backend...
New
Hello, I have map which I want to convert it to string like this:
the map:
%{last_name: "tavakkoli", name: "shahryar"}
the string I ne...
New
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum.
...
New
I have a User schema with a :from_id field set to type :string:
defmodule TweetBot.Repo.Migrations.CreateUsers do
use Ecto.Migration
...
New
Hi,
I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
Okay, I’m having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I’m sure I’...
New
Other popular topics
Hello!
tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability.
After spen...
New
Hi guys, i’m new in the Elixir world, and i have to say, that i love it!
i’m having some problem to understand anonymous functions with ...
New
Using vs code and installed ElixirLS: support and debugger.
And I got an error popped up on start up says
Failed to run ‘elixir’ comma...
New
Please see the new poll here: Which code editor or IDE do you use? (Poll) (2022 Edition)
It’s been a while since we first asked this, I...
New
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!)
This post collects co...
New
Hello!
Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
Update:
How to use the Blogs & Podcasts section
You can post links to your blog posts or podcasts either in one of the Official Blog...
New
Seen any cool LiveView demos, sample apps or examples? Please post them here! :003:
New
Lets say I have map like this fetching from my database
%{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








