2016-11-25 36 views
1

私はHTTPSドメインに対してsimpleHttpリクエストを実行していますが、応答HTMLは「サポートされていないブラウザ」メッセージを表示しています。これはsimpleHttpがHTTPSをサポートしていないためです。simpleHttpは 'サポートされていないブラウザの応答ですか?'

My機能:ライブラリのhaskell

import Network.HTTP.Simple 

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

は、HTTPSをサポートしていますか?

+0

通知するのは難しい - おそらくそれらのメッセージはJavascriptで実行されていると思われるでしょうか?ブラウザで同じWebページを開き、ソースが異なるかどうかを調べます。 Webサーバーは、すべてのユーザーエージェントに対して別のページを生成することもできます(これは非常に悪いことです)。 – chi

+0

@chi Node.jsの 'request'ライブラリを使ってサイトをテストしたところうまくいきました。だから私は、HTTPドライバNetwork.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.ConduitからsimpleHttp機能を使用することにより:wreqはHTTP-コンジット(HTTPクライアント)のような表面の下で同じHTTPエンジンを使用しています

{-# 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 

注ことを。私の推測では、もともとHTTPクライアント自体の機能の1つを使用しようとしていたのですが、そのコードがどのように見えるかわかりません。

関連する問題