view modules/http.tp @ 153:075b1e71feff

A little more work on the HTTP module
author Mike Pavone <pavone@retrodev.com>
date Fri, 09 Aug 2013 21:01:11 -0700
parents 7f442b3e4448
children 55e0dca7d3d7
line wrap: on
line source

#{
	client:usingPort <- :address :port{
		#{
			get <- :path {
				sock <- socket connectTo: address onPort: port
				sock send: "GET " . path . " HTTP/1.1\r\nHost: " . address . "\r\n\r\n"
				resp <- ""
				waiting <- true
				headerText <- ""
				rest <- ""
				while: { waiting } do: {
					data <- sock recv 4096
					resp <- resp . data
					pos <- resp find: "\r\n\r\n" else: { -1 }
					if: pos >= 0 {
						waiting <- false
						headerText <- resp from: 0 withLength: pos
						rest <- resp from: pos + 4
					}
				}
				print: "Headers:\n" . headerText . "\n"
				print: "Rest:\n" . rest . "\n"
				_headers <- (headerText split: "\r\n") fold: (dict linear) with: :acc curLine{
					//TODO: support multiple headers with the same name
					part <- curLine partitionOn: ":"
					acc set: (part before) (trim: (part after))
				}
				_closed <- false
				#{

				}
				sock close
				rest
			}
		}
	}

	client <- :address {
		client: address usingPort: 80
	}
}