dev*_*and 15 https networking haskell
有没有办法使用Network.Browser包进行https调用.我没有在Hackage的文档中看到它.
如果没有办法使用浏览是否有另一种方法来获取https页面?
我目前的测试代码是
import Network.HTTP
import Network.URI (parseURI)
import Network.HTTP.Proxy
import Data.Maybe (fromJust)
import Control.Applicative ((<$>))
import Network.Browser
retrieveUrl :: String -> IO String
retrieveUrl url = do
rsp <- browse $ request (Request (fromJust uri) POST [] "Body")
return $ snd (rspBody <$> rsp)
where uri = parseURI url
Run Code Online (Sandbox Code Playgroud)
我一直在运行nc -l -p 8000并观察输出.我看到当我执行retrieveUrl https:// localhost:8000时它没有对它进行加密
此外,当我尝试一个真正的https网站时,我得到:
Network.Browser.request: Error raised ErrorClosed
*** Exception: user error (Network.Browser.request: Error raised ErrorClosed)
Run Code Online (Sandbox Code Playgroud)
编辑:Network.Curl解决方案(用于执行SOAP调用)
import Network.Curl (curlGetString)
import Network.Curl.Opts
soapHeader s = CurlHttpHeaders ["Content-Type: text/xml", "SOAPAction: " ++ s]
proxy = CurlProxy "proxy.foo.org"
envelope = "myRequestEnvelope.xml"
headers = readFile envelope >>= (\x -> return [ soapHeader "myAction"
, proxy
, CurlPost True
, CurlPostFields [x]])
main = headers >>= curlGetString "https://service.endpoint"
Run Code Online (Sandbox Code Playgroud)
Dav*_*rak 12
另一种也许更像是"haskelly"的解决方案,正如Travis Brown用http-conduit所做的那样:
要获取https页面:
import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as L
main = simpleHttp "https://www.noisebridge.net/wiki/Noisebridge" >>= L.putStr
Run Code Online (Sandbox Code Playgroud)
下面显示了如何传递urlencode参数.
{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as L
main = do
initReq <- parseUrl "https://www.googleapis.com/urlshortener/v1/url"
let req' = initReq { secure = True } -- Turn on https
let req = (flip urlEncodedBody) req' $
[ ("longUrl", "http://www.google.com/")
-- ,
]
response <- withManager $ httpLbs req
L.putStr $ responseBody response
Run Code Online (Sandbox Code Playgroud)
您也可以手动设置方法,内容类型和请求正文.api与http-enumerator中的相同,一个很好的例子是:https://stackoverflow.com/a/5614946