Печать байтовых строк на веб-сервере Spock - PullRequest
0 голосов
/ 10 июня 2019

Визуализация тела строки байтов на веб-сервере, работающем на Spock (например, localhost)

Моя цель: создать сайт и просмотреть строку байтов (преобразованную в текст) Framework: Http Simple для выполнения запроса на перезапуск API Spock для моегоСервер, например, я не хочу создавать JSON, так как мне нужно манипулировать / проверять мой ответ перед созданием структуры JSON.Общая идея заключается в том, что я хочу использовать тело ответа для построения структуры запроса JSON (пользователь сможет составить свой вопрос), который будет отправлен на сайт restAPI.

Мне удается создать запрос, подобный следующему:

    connect = do
        request' <- (parseRequest "http://localhost")
        let request = setRequestMethod "POST"
                    $ setRequestHost (S8.pack ("xx.xxx.xxx.xxx"))
                    $ setRequestPath "/api/Integration/Login"
                    $ setRequestBodyJSON me
                    $ setRequestPort 1000
                    $ request'
        response <- httpJSON request
        return (getResponseBody response :: Auth)

, затем я использовал его для запроса страницы API

getRequest :: RequestPath -> HtmlT IO L.ByteString
getRequest rpath = do
        atoken <- liftIO connect
        request' <-  liftIO (parseRequest "http://localhost")
        let request = setRequestMethod "POST"
                    $ setRequestHost (S8.pack ("xx.xxx.xxx.xxx"))
                    $ setRequestPort 1000
                    $ setRequestPath (S8.pack ("/api/Integration/" ++ rpath))
                    $ addRequestHeader hAuthorization (S8.pack (unpack (token_type (atoken)) ++ " " ++ unpack (access_token (atoken))))
                    $ setRequestBodyJSON r1
                    $ request'
        response <- httpLBS request
        return (getResponseBody (response))

, затем следую короткой монадой SpockM:

app1 = do get root $ text "root"
          fct 

с fct, равным

fct = do get "/further" $ lucidIO ( fmap TL.decodeUtf8 (getRequest "GetProperties"))

Все отлично компилируется. Я даже могу видеть результат в GHCI с вызовом вроде: connect >>= (\ x -> print x) (то же самое с getRequest "GetProperties"Что я не понимаю, так это то, что lucidIO должен дать мне тип ActionCtxtT ctx mb, который идеально подходит для типа обработчика (например, как текстовая функция в do get ... $ text -> ActionCtxT ctx m a) и должен обрабатываться функцией спока в main() то есть runSpock 8080 (spock spockCfg app1) Я попытался избавиться от типа 'конечного' ByteString, заменив его на (), чтобы максимально имитировать тип Html (), который обнаруживается и работает во многих примерах, которые я изучал.Весь синтаксический анализ и построение запросов выполняется с помощью HTTP.Simple (это не очень элегантно, я знаю, например, что он просто должен работать), который тянет меня с самого начала в монаде (из-за первой функции 'parseRequest' -> m Request) изот которого я не могу убежать до lucidIO - может быть, я выбираю неправильную монаду (т.е. IO: но с IO я могу проверить все в ghci).Не могли бы вы дать мне несколько советов о том, как распечатать эту строку ByteString в моем браузере?

...