http4s с использованием двойных кавычек и фигурных скобок в uri

Я не могу найти решение, как построить этот uri

import org.http4s._
import org.http4s.implicits.http4sLiteralsSyntax

val uriFoll: Uri = uri"https://www.instagram.com/graphql/query/?query_hash=c76146de99bb02f6415203be841dd25a&variables={"id":"374397360","include_reel":false,"fetch_mutual":false,"first":24}"

person Aleksey N Yakushev    schedule 22.09.2020    source источник


Ответы (2)


Как правило, переменные GET должны быть закодированы в URL (https://www.w3schools.com/tags/ref_urlencode.ASP), поэтому, вероятно, должно быть так:

val uriFoll: Uri = uri"https://www.instagram.com/graphql/query/?query_hash=c76146de99bb02f6415203be841dd25a&variables=%7B%22id%22%3A%22374397360%22%2C%22include_reel%22%3Afalse%2C%22fetch_mutual%22%3Afalse%2C%22first%22%3A24%7D"
person AndyB    schedule 22.09.2020

Решение

val vars: String = "{\"id\":\"374397360\",\"include_reel\":false,\"fetch_mutual\":false,\"first\":24}"
val varsEncoded: String = Uri.encode(vars)
val uriFoll: Uri = Uri.unsafeFromString(s"https://www.instagram.com/graphql/query/?query_hash=c76146de99bb02f6415203be841dd25a&variables=$varsEncoded")
person Aleksey N Yakushev    schedule 22.09.2020
comment
Если вас не волнует проверка всего URL-адреса во время компиляции, то, возможно, это решение немного чище: val uriFoll: Uri = uri"https://www.instagram.com/graphql/query/" .withQueryParam("query_hash", "c76146de99bb02f6415203be841dd25a") .withQueryParam("variables", """{"id":"374397360","include_reel":false,"fetch_mutual":false,"first":24}""") - person AndyB; 22.09.2020