Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP.get fails on julia 1.11.0-alpha1 #1157

Closed
PerezHz opened this issue Mar 3, 2024 · 3 comments
Closed

HTTP.get fails on julia 1.11.0-alpha1 #1157

PerezHz opened this issue Mar 3, 2024 · 3 comments

Comments

@PerezHz
Copy link

PerezHz commented Mar 3, 2024

Versions:

  • Julia 1.11.10-alpha1
  • HTTP.jl 1.10.2
  • MbedTLS.jl 1.1.9

As reported in PerezHz/HORIZONS.jl#37, we have some code which runs fine on julia1.10, but fails on julia1.11.0-alpha1. We managed to reproduce the issue with the following MWE:

julia> using HTTP

julia> HTTP.get("https://ssd.jpl.nasa.gov/api/horizons.api", query=Dict("COMMAND"=>"1"))

The produced error is:

ERROR: HTTP.RequestError:
HTTP.Request:
HTTP.Messages.Request:
"""
GET /api/horizons.api?COMMAND=1 HTTP/1.1
Host: ssd.jpl.nasa.gov
Accept: */*
User-Agent: HTTP.jl/1.11.0-alpha1
Content-Length: 0
Accept-Encoding: gzip

"""Underlying error:
MethodError: Cannot `convert` an object of type 
  SubArray{UInt8,1,Memory{UInt8},Tuple{UnitRange{Int64}},true} to an object of type 
  SubArray{UInt8,1,Vector{UInt8},Tuple{UnitRange{Int64}},true}
The function `convert` exists, but no method is defined for this combination of argument types.

Closest candidates are:
  SubArray{T, N, P, I, L}(::Any, ::Any, ::Any, ::Any) where {T, N, P, I, L}
   @ Base subarray.jl:19
  convert(::Type{T}, ::LinearAlgebra.Factorization) where T<:AbstractArray
   @ LinearAlgebra /Applications/Julia-1.11.app/Contents/Resources/julia/share/julia/stdlib/v1.11/LinearAlgebra/src/factorization.jl:104
  convert(::Type{T}, ::T) where T
   @ Base Base.jl:126
  ...

Stacktrace:
  [1] (::HTTP.ConnectionRequest.var"#connections#4"{})(req::HTTP.Messages.Request; proxy::Nothing, socket_type::Type, socket_type_tls::Type, readtimeout::Int64, connect_timeout::Int64, logerrors::Bool, logtag::Nothing, kw::@Kwargs{})
    @ HTTP.ConnectionRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/ConnectionRequest.jl:140
  [2] (::Base.var"#103#105"{Base.var"#103#104#106"{}})(args::HTTP.Messages.Request; kwargs::@Kwargs{iofunction::Nothing, decompress::Nothing, verbose::Int64})
    @ Base ./error.jl:298
  [3] (::HTTP.RetryRequest.var"#manageretries#3"{})(req::HTTP.Messages.Request; retry::Bool, retries::Int64, retry_delays::ExponentialBackOff, retry_check::Function, retry_non_idempotent::Bool, kw::@Kwargs{})
    @ HTTP.RetryRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/RetryRequest.jl:75
  [4] manageretries
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/RetryRequest.jl:30 [inlined]
  [5] (::HTTP.CookieRequest.var"#managecookies#4"{})(req::HTTP.Messages.Request; cookies::Bool, cookiejar::HTTP.Cookies.CookieJar, kw::@Kwargs{})
    @ HTTP.CookieRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/CookieRequest.jl:42
  [6] managecookies
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/CookieRequest.jl:19 [inlined]
  [7] (::HTTP.HeadersRequest.var"#defaultheaders#2"{})(req::HTTP.Messages.Request; iofunction::Nothing, decompress::Nothing, basicauth::Bool, detect_content_type::Bool, canonicalize_headers::Bool, kw::@Kwargs{})
    @ HTTP.HeadersRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/HeadersRequest.jl:71
  [8] defaultheaders
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/HeadersRequest.jl:14 [inlined]
  [9] (::HTTP.RedirectRequest.var"#redirects#3"{})(req::HTTP.Messages.Request; redirect::Bool, redirect_limit::Int64, redirect_method::Nothing, forwardheaders::Bool, response_stream::Nothing, kw::@Kwargs{})
    @ HTTP.RedirectRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/RedirectRequest.jl:25
 [10] redirects
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/RedirectRequest.jl:14 [inlined]
 [11] (::HTTP.MessageRequest.var"#makerequest#3"{})(method::String, url::URIs.URI, headers::Nothing, body::Vector{…}; copyheaders::Bool, response_stream::Nothing, http_version::HTTP.Strings.HTTPVersion, verbose::Int64, kw::@Kwargs{})
    @ HTTP.MessageRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/MessageRequest.jl:35
 [12] makerequest
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/MessageRequest.jl:24 [inlined]
 [13] request(stack::HTTP.MessageRequest.var"#makerequest#3"{}, method::String, url::String, h::Nothing, b::Vector{…}, q::Dict{…}; headers::Nothing, body::Vector{…}, query::Dict{…}, kw::@Kwargs{})
    @ HTTP ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:457
 [14] request(stack::Function, method::String, url::String, h::Nothing, b::Vector{UInt8}, q::Dict{String, String})
    @ HTTP ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:455
 [15] #request#20
    @ ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:315 [inlined]
 [16] request (repeats 2 times)
    @ ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:313 [inlined]
 [17] #get#38
    @ ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:518 [inlined]
 [18] top-level scope
    @ REPL[3]:1

caused by: TaskFailedException

    nested task error: MethodError: Cannot `convert` an object of type 
      SubArray{UInt8,1,Memory{UInt8},Tuple{UnitRange{Int64}},true} to an object of type 
      SubArray{UInt8,1,Vector{UInt8},Tuple{UnitRange{Int64}},true}
    The function `convert` exists, but no method is defined for this combination of argument types.
    
    Closest candidates are:
      SubArray{T, N, P, I, L}(::Any, ::Any, ::Any, ::Any) where {T, N, P, I, L}
       @ Base subarray.jl:19
      convert(::Type{T}, ::LinearAlgebra.Factorization) where T<:AbstractArray
       @ LinearAlgebra /Applications/Julia-1.11.app/Contents/Resources/julia/share/julia/stdlib/v1.11/LinearAlgebra/src/factorization.jl:104
      convert(::Type{T}, ::T) where T
       @ Base Base.jl:126
      ...
    
    Stacktrace:
     [1] readuntil
       @ ~/.julia/packages/HTTP/1EWL3/src/IOExtras.jl:125 [inlined]
     [2] readuntil(c::HTTP.Connections.Connection{…}, f::typeof(HTTP.Parsers.find_end_of_header), sizehint::Int64)
       @ HTTP.Connections ~/.julia/packages/HTTP/1EWL3/src/Connections.jl:242
     [3] readuntil(c::HTTP.Connections.Connection{OpenSSL.SSLStream}, f::typeof(HTTP.Parsers.find_end_of_header))
       @ HTTP.Connections ~/.julia/packages/HTTP/1EWL3/src/Connections.jl:238
     [4] readheaders(io::HTTP.Connections.Connection{OpenSSL.SSLStream}, message::HTTP.Messages.Response)
       @ HTTP.Messages ~/.julia/packages/HTTP/1EWL3/src/Messages.jl:533
     [5] startread(http::HTTP.Streams.Stream{HTTP.Messages.Response, HTTP.Connections.Connection{OpenSSL.SSLStream}})
       @ HTTP.Streams ~/.julia/packages/HTTP/1EWL3/src/Streams.jl:153
     [6] eof
       @ ~/.julia/packages/HTTP/1EWL3/src/Streams.jl:186 [inlined]
     [7] macro expansion
       @ ~/.julia/packages/HTTP/1EWL3/src/Exceptions.jl:19 [inlined]
     [8] closeread(http::HTTP.Streams.Stream{HTTP.Messages.Response, HTTP.Connections.Connection{OpenSSL.SSLStream}})
       @ HTTP.Streams ~/.julia/packages/HTTP/1EWL3/src/Streams.jl:375
     [9] (::HTTP.StreamRequest.var"#3#5"{})()
       @ HTTP.StreamRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/StreamRequest.jl:60
    
    caused by: MethodError: Cannot `convert` an object of type 
      SubArray{UInt8,1,Memory{UInt8},Tuple{UnitRange{Int64}},true} to an object of type 
      SubArray{UInt8,1,Vector{UInt8},Tuple{UnitRange{Int64}},true}
    The function `convert` exists, but no method is defined for this combination of argument types.
    
    Closest candidates are:
      SubArray{T, N, P, I, L}(::Any, ::Any, ::Any, ::Any) where {T, N, P, I, L}
       @ Base subarray.jl:19
      convert(::Type{T}, ::LinearAlgebra.Factorization) where T<:AbstractArray
       @ LinearAlgebra /Applications/Julia-1.11.app/Contents/Resources/julia/share/julia/stdlib/v1.11/LinearAlgebra/src/factorization.jl:104
      convert(::Type{T}, ::T) where T
       @ Base Base.jl:126
      ...
    
    Stacktrace:
     [1] readuntil
       @ ~/.julia/packages/HTTP/1EWL3/src/IOExtras.jl:125 [inlined]
     [2] readuntil(c::HTTP.Connections.Connection{…}, f::typeof(HTTP.Parsers.find_end_of_header), sizehint::Int64)
       @ HTTP.Connections ~/.julia/packages/HTTP/1EWL3/src/Connections.jl:242
     [3] readuntil(c::HTTP.Connections.Connection{OpenSSL.SSLStream}, f::typeof(HTTP.Parsers.find_end_of_header))
       @ HTTP.Connections ~/.julia/packages/HTTP/1EWL3/src/Connections.jl:238
     [4] readheaders(io::HTTP.Connections.Connection{OpenSSL.SSLStream}, message::HTTP.Messages.Response)
       @ HTTP.Messages ~/.julia/packages/HTTP/1EWL3/src/Messages.jl:533
     [5] startread(http::HTTP.Streams.Stream{HTTP.Messages.Response, HTTP.Connections.Connection{OpenSSL.SSLStream}})
       @ HTTP.Streams ~/.julia/packages/HTTP/1EWL3/src/Streams.jl:153
     [6] (::HTTP.StreamRequest.var"#3#5"{})()
       @ HTTP.StreamRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/StreamRequest.jl:51
Stacktrace:
  [1] sync_end(c::Channel{Any})
    @ Base ./task.jl:459
  [2] macro expansion
    @ ./task.jl:492 [inlined]
  [3] streamlayer(stream::HTTP.Streams.Stream{…}; iofunction::Nothing, decompress::Nothing, logerrors::Bool, logtag::Nothing, timedout::Nothing, kw::@Kwargs{})
    @ HTTP.StreamRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/StreamRequest.jl:34
  [4] streamlayer
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/StreamRequest.jl:20 [inlined]
  [5] (::HTTP.ExceptionRequest.var"#exceptions#2"{})(stream::HTTP.Streams.Stream{…}; status_exception::Bool, timedout::Nothing, logerrors::Bool, logtag::Nothing, kw::@Kwargs{})
    @ HTTP.ExceptionRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/ExceptionRequest.jl:14
  [6] exceptions
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/ExceptionRequest.jl:13 [inlined]
  [7] (::HTTP.TimeoutRequest.var"#timeouts#3"{})(stream::HTTP.Streams.Stream{…}; readtimeout::Int64, logerrors::Bool, logtag::Nothing, kw::@Kwargs{})
    @ HTTP.TimeoutRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/TimeoutRequest.jl:18
  [8] (::HTTP.ConnectionRequest.var"#connections#4"{})(req::HTTP.Messages.Request; proxy::Nothing, socket_type::Type, socket_type_tls::Type, readtimeout::Int64, connect_timeout::Int64, logerrors::Bool, logtag::Nothing, kw::@Kwargs{})
    @ HTTP.ConnectionRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/ConnectionRequest.jl:119
  [9] (::Base.var"#103#105"{Base.var"#103#104#106"{}})(args::HTTP.Messages.Request; kwargs::@Kwargs{iofunction::Nothing, decompress::Nothing, verbose::Int64})
    @ Base ./error.jl:298
 [10] (::HTTP.RetryRequest.var"#manageretries#3"{})(req::HTTP.Messages.Request; retry::Bool, retries::Int64, retry_delays::ExponentialBackOff, retry_check::Function, retry_non_idempotent::Bool, kw::@Kwargs{})
    @ HTTP.RetryRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/RetryRequest.jl:75
 [11] manageretries
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/RetryRequest.jl:30 [inlined]
 [12] (::HTTP.CookieRequest.var"#managecookies#4"{})(req::HTTP.Messages.Request; cookies::Bool, cookiejar::HTTP.Cookies.CookieJar, kw::@Kwargs{})
    @ HTTP.CookieRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/CookieRequest.jl:42
 [13] managecookies
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/CookieRequest.jl:19 [inlined]
 [14] (::HTTP.HeadersRequest.var"#defaultheaders#2"{})(req::HTTP.Messages.Request; iofunction::Nothing, decompress::Nothing, basicauth::Bool, detect_content_type::Bool, canonicalize_headers::Bool, kw::@Kwargs{})
    @ HTTP.HeadersRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/HeadersRequest.jl:71
 [15] defaultheaders
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/HeadersRequest.jl:14 [inlined]
 [16] (::HTTP.RedirectRequest.var"#redirects#3"{})(req::HTTP.Messages.Request; redirect::Bool, redirect_limit::Int64, redirect_method::Nothing, forwardheaders::Bool, response_stream::Nothing, kw::@Kwargs{})
    @ HTTP.RedirectRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/RedirectRequest.jl:25
 [17] redirects
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/RedirectRequest.jl:14 [inlined]
 [18] (::HTTP.MessageRequest.var"#makerequest#3"{})(method::String, url::URIs.URI, headers::Nothing, body::Vector{…}; copyheaders::Bool, response_stream::Nothing, http_version::HTTP.Strings.HTTPVersion, verbose::Int64, kw::@Kwargs{})
    @ HTTP.MessageRequest ~/.julia/packages/HTTP/1EWL3/src/clientlayers/MessageRequest.jl:35
 [19] makerequest
    @ ~/.julia/packages/HTTP/1EWL3/src/clientlayers/MessageRequest.jl:24 [inlined]
 [20] request(stack::HTTP.MessageRequest.var"#makerequest#3"{}, method::String, url::String, h::Nothing, b::Vector{…}, q::Dict{…}; headers::Nothing, body::Vector{…}, query::Dict{…}, kw::@Kwargs{})
    @ HTTP ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:457
 [21] request(stack::Function, method::String, url::String, h::Nothing, b::Vector{UInt8}, q::Dict{String, String})
    @ HTTP ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:455
 [22] #request#20
    @ ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:315 [inlined]
 [23] request (repeats 2 times)
    @ ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:313 [inlined]
 [24] #get#38
    @ ~/.julia/packages/HTTP/1EWL3/src/HTTP.jl:518 [inlined]
 [25] top-level scope
    @ REPL[3]:1
Some type information was truncated. Use `show(err)` to see complete types.
@mortenpi
Copy link
Contributor

mortenpi commented Mar 4, 2024

X-ref: JuliaLang/julia#53425

@PerezHz
Copy link
Author

PerezHz commented Mar 4, 2024

Ah, wasn't aware of that, many thanks for pointing us to it @mortenpi!

@PerezHz
Copy link
Author

PerezHz commented Mar 4, 2024

HTTP.jl v1.10.3 solves this issue, many thanks!

@PerezHz PerezHz closed this as completed Mar 4, 2024
teabolt added a commit to teabolt/CGT.jl that referenced this issue Oct 20, 2024
The program was broken on julia 1.11.1 due to
old HTTP dependency that breaks in newer
julia versions. See
JuliaWeb/HTTP.jl#1157
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants