Обработка параметров 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
случаи, где это применимо.