#! /usr/bin/env fan // // Copyright (c) 2008, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 30 Dec 08 Brian Frank Creation // 08 Sep 09 Brian Frank Rework fandoc -> example // using web ** ** Working with WebClient ** class Client { Void main() { gets pipelining // need to have a server which accepts posts for this test // posts } Void gets() { // simple string get echo("\n--- getStr ---") str := WebClient(`http://fantom.org/`).getStr echo(str.in.readLine + "...") // simple binary get echo("\n--- getBuf ---") buf := WebClient(`http://fantom.org/`).getBuf echo(buf.readLine + "...") // get as input stream echo("\n--- getIn ---") c := WebClient(`http://fantom.org/doc/`) try { in := c.getIn echo("getIn: " + in.readLine) } finally c.close // dump get response headers and string body echo("\n--- response headers ---") c = WebClient(`http://google.com/`).writeReq.readRes echo("$c.reqUri => $c.resCode $c.resPhrase") echo(c.resHeaders.join("\n")) echo(c.resStr[0..30] + "...") c.close } Void posts() { // post form c := WebClient(`http://foo/post.cgi`) c.postForm(["firstName":"Bob", "lastName":"Smith"]) echo(c.resStr) // process response c.close // post content with fixed length c = WebClient(`http://foo/post.cgi`) c.reqMethod = "POST" c.reqHeaders["Content-Type"] = "text/plain; charset=utf-8" c.reqHeaders["Content-Length"] = "5" c.writeReq c.reqOut.print("hello").close c.readRes echo(c.resStr) // process response c.close } Void pipelining() { echo("\n--- pipelining ---") // pipelining: write 2 requests, then read 2 responses c := WebClient() c.reqUri = `http://fantom.org/` c.writeReq c.reqUri = `http://fantom.org/doc/` c.writeReq c.readRes echo(c.resStr[0..30] + "...") // process path1 response c.readRes echo(c.resStr[0..30] + "...") // process path2 response } }