Skip to content

Instantly share code, notes, and snippets.

@naoto-ogawa
Last active November 11, 2017 04:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save naoto-ogawa/cb16dda04b3f1f2a141eb75550901a49 to your computer and use it in GitHub Desktop.
Save naoto-ogawa/cb16dda04b3f1f2a141eb75550901a49 to your computer and use it in GitHub Desktop.
Haskell TLS Connection Sample
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Prelude hiding (getContents)
import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as C
import Data.Default.Class
import Network.Connection
import Network.TLS
main = do
ctx <- initConnectionContext
con <- connectTo ctx ConnectionParams
{ connectionHostname = "somewehre"
, connectionPort = 443
, connectionUseSecure = Nothing
, connectionUseSocks = Nothing
}
connectionSetSecure ctx con def
connectionPut con "Password=QWERT\n" -- invalid date
contents <- getContents con B.empty
mapM_ print (C.split '\n' contents)
connectionClose con
getContents :: Connection -> B.ByteString -> IO B.ByteString
getContents con acc = do
lines <- connectionGetChunk con
-- putStrLn $ show lines
-- putStrLn $ show $ B.null lines
if B.null lines
then return acc
else getContents con $ acc `B.append` lines
@naoto-ogawa
Copy link
Author

An example of accessing to google.

*> main
"HTTP/1.0 400 Bad Request\r"
"Content-Type: text/html; charset=UTF-8\r"
"Referrer-Policy: no-referrer\r"
"Content-Length: 1555\r"
"Date: Sat, 11 Nov 2017 03:37:46 GMT\r"
"\r"
"<!DOCTYPE html>"
"<html lang=en>"
"  <meta charset=utf-8>"
"  <meta name=viewport content=\"initial-scale=1, minimum-scale=1, width=device-width\">"
"  <title>Error 400 (Bad Request)!!1</title>"
"  <style>"
"    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}"
"  </style>"
"  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>"
"  <p><b>400.</b> <ins>That\226\128\153s an error.</ins>"
"  <p>Your client has issued a malformed or illegal request.  <ins>That\226\128\153s all we know.</ins>"
""

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment