2016-11-25 60 views
1

我對https域執行simpleHttp請求,但響應html顯示'不支持的瀏覽器'消息 - 我相信這是因爲simpleHttp不支持HTTPS。simpleHttp導致'不受支持的瀏覽器響應?'

我的功能:

import Network.HTTP.Simple 

makeRequest :: IO LAZ.ByteString 
makeRequest = do 
    response <- simpleHttp "https://www.example.com" 
    return (response) 

哪些哈斯克爾庫支持HTTPS?

+0

很難說 - 也許這些消息應該被Javascript隱藏,它運行嗎?嘗試在瀏覽器中打開相同的網頁並檢查源代碼,看看它是否有所不同。 Web服務器也可能爲每個用戶代理生成一個不同的頁面(如果是這種情況,這非常糟糕)。 – chi

+0

@chi我在Node.js中使用'request'庫測試了這個站點,它工作正常。所以我認爲它與網絡。HTTP正在使用的http驅動程序。也許我可以嘗試Network.Wreq,但文檔是基於鏡頭',我還沒有涉及! –

+0

@chi原來對於Wreq只需要非常非常基本的鏡頭理解,而且我找到了我的解決方案:) –

回答

2

Wreq使用基本的鏡頭語法提供了一個非常簡單的http/s請求教程。

main = do 
    r <- get "https://www.example.com" 

響應狀態和體可以分別訪問:

r ^. responseStatus . statusCode 
    r ^. responseBody 
0

此代碼不編譯爲

甲HTTPS兼容請求是一樣簡單。即使加入了LAZ導入,Network.HTTP.Simple模塊也不提供simpleHttp功能。你可以用httpLBS做到這一點:

{-# LANGUAGE OverloadedStrings #-} 
import Network.HTTP.Simple 
import qualified Data.ByteString.Lazy as LAZ 

makeRequest :: IO LAZ.ByteString 
makeRequest = do 
response <- httpLBS "https://www.example.com" 
return (getResponseBody response) 

main :: IO() 
main = makeRequest >>= LAZ.putStr 

,或者使用從Network.HTTP.ConduitsimpleHttp功能:

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

makeRequest :: IO LAZ.ByteString 
makeRequest = simpleHttp "https://www.example.com" 

main :: IO() 
main = makeRequest >>= LAZ.putStr 

注意wreq使用相同的HTTP引擎表面爲http-管道(HTTP客戶端)下。我的猜測是,你最初嘗試使用http-client本身的一個函數,但我不確定那些代碼會是什麼樣子。