Обработка параметров HTTP-запроса в http-проводнике

Я хочу скачать содержание URL

http://example.com/foobar?key1=value1&key2=value2

используя http-проводник (запрос GET).

Как мне это сделать:

а) Предполагая, что я уже знаю полный (т.е. закодированный URL) б) Если некоторые параметры являются динамическими и, следовательно, не закодированы в URL?

Примечание: на этот вопрос был дан ответ в стиле Q&A, и поэтому намеренно не показывает каких-либо исследований.

1 ответ

Решение

Относительно а):

Ты можешь использовать simpleHttp с URL-адресом, содержащим параметры запроса, как в примере в документации:

{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as LB

main :: IO ()
main =
    simpleHttp "http://example.com/foobar?key1=value1&key2=value2" >>= LB.putStr

Что касается б):

Вам нужен список кортежей ключ / значение типа [(ByteString, Maybe ByteString)] который содержит параметры вашего запроса.

{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Conduit
import Data.ByteString (ByteString)
import qualified Data.ByteString.Lazy.Char8 as LB

queryParams :: [(ByteString, Maybe ByteString)]
queryParams = [
    ("key1", Just "value1"),
    ("key2", Just "value2")]

main :: IO ()
main = do
    request <- parseUrl "http://example.com/foobar"
    let request' = setQueryString queryParams request
    response <- withManager $ httpLbs request'
    LB.putStrLn $ responseBody response

Примечание: для этого требуется как минимум http-проводник 2.1. Также обратите внимание, что рекомендуется использовать повторно Manager случаи, где это применимо.

Другие вопросы по тегам