A simple example code for doing by hand:
    
    
    # index.php (sorry for php here but i was lazy)
    # <?php
    #   $value = 'something from somewhere';
    #   setcookie("TestCookie", $value);
    # ?>
    
    import httpClient
    var client = newHttpClient()
    
    
    # our "login", index.php just sets a cookie
    let resp = client.get("http://127.0.0.1:80/ttt/index.php";)
    
    # server sends a cookie useing "Set-Cookie" in its http headers
    let cookie = resp.headers["Set-Cookie"]
    echo "the cookie: ",  cookie
    
    #
    # here store the cookie in a file/or load it
    #
    
    # now every request we do should contain the cookie
    # we set this with "Cookie"
    client.headers["Cookie"] = cookie
    client.get("http://127.0.0.1:80/ttt/index.php";)
    
    
    Run

A module that handles stuff for you:

[https://nim-lang.org/1.0.6/cookies.html](https://nim-lang.org/1.0.6/cookies.html)

and last but not least, example code that i use in my small asyncHttpTools 
library for handle cookies:
    
    
    import cookies
    export cookies
    
    import strtabs
    export strtabs
    
    import cgi # for decodeData
    import uri # for encodeQuery
    
    import asynchttpserver
    
    type
      Cookie* = StringTableRef
    
    proc parseCookies*(request: Request): Cookie =
      ## Parses a cookie transmitted by the browser to the server
      if request.headers.hasKey("Cookie"):
        return parseCookies(request.headers["Cookie"])
      else:
        return newStringTable()
    
    proc addCookie*(headers: var HttpHeaders, data: StringTableRef) =
      ## adds cookies to the HttpHeaders.
      # format(expires.utc, "ddd',' dd MMM yyyy HH:mm:ss 'GMT'")
      headers["Set-Cookie"] = @[] # @[line
      var lines: seq[string] = @[]
      for key, val in data:
        lines.add key & "=" & val.encodeUrl & ";"
      headers["Set-Cookie"] = lines
    
    proc decodeData*(data: string): StringTableRef =
      ## Decodes form data into a StringTable
      ## TODO dublicated keys are not supported
      result = newStringTable()
      for key, val in decodeData(data):
        result[$key] = $val
    
    proc encodeData*(tab: StringTableRef, usePlus = false; omitEq = true): 
string =
      ## Encodes a StringTable into a form data string
      var dat: seq[(string, string)] = @[]
      for key, val in tab:
        dat.add( (key, val) )
      return encodeQuery(dat)
    
    
    Run

Reply via email to