Поместите информацию запроса в ответ Haskell веб-сервера - PullRequest
0 голосов
/ 07 мая 2020

Я совершенно не знаком с Haskell, так что, вероятно, это основной c вопрос.

У меня есть следующий код веб-сервера, который выводит «Hello World!» когда вы переходите к http://localhost:8080 в своем браузере.

Я пытаюсь вместо того, чтобы показать «Hello World!» Я хочу видеть только данные запроса, такие как заголовки, путь, хост, тело и т. Д. c.

Возможно ли это?

{-# LANGUAGE OverloadedStrings #-}

import Data.ByteString.Char8 ()
import Network hiding ( accept )
import Network.Socket ( accept )
import Network.Socket.ByteString ( sendAll )
import Control.Monad ( forever )
import Control.Exception ( bracket, finally )
import Control.Concurrent ( forkIO )

main :: IO ()
main = bracket (listenOn $ PortNumber 8080) sClose loop where
  loop s = forever $ forkIO . request . fst =<< accept s
  request c = sendAll c response `finally` sClose c
  response = "HTTP/1.0 200 OK\nContent-Length: 13\n\nHello World!\n"

Или, как вариант, тот же logi c с пакетом Warp:

{-# LANGUAGE OverloadedStrings #-}

import Network.Wai
import Network.Wai.Handler.Warp
import Network.HTTP.Types (status200)
import Blaze.ByteString.Builder (copyByteString)
import qualified Data.ByteString.Lazy as BU
import Data.Monoid

main = do
    let port = 8080
    putStrLn $ "Listening on port " ++ show port
    run port app

app req respond = respond $
    case pathInfo req of
        x -> index x

index x = responseBuilder status200 [("Content-Type", "text/plain")] $ mconcat $ map copyByteString
    [ "Hello World!\n" ]

Мне просто нужно указать информацию о запросе вместо «Hello World ! "

1 Ответ

1 голос
/ 07 мая 2020

Вы можете использовать функцию recv , чтобы получить информацию о запросе. Сначала добавьте его в свой импорт

import Network.Socket.ByteString ( sendAll, recv )

Затем используйте его в main:

main :: IO ()
main = bracket (listenOn $ PortNumber 8080) sClose loop where
  loop s = forever $ forkIO . request . fst =<< accept s
  request c = do info <- recv c 1024               -- Get the request information
                 print info                        -- Print info to console
                 sendAll c info `finally` sClose c -- Send info as response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...