Mercurial > repos > tabletprog
annotate 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 |
rev | line source |
---|---|
149
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #{ |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 client:usingPort <- :address :port{ |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 #{ |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 get <- :path { |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 sock <- socket connectTo: address onPort: port |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 sock send: "GET " . path . " HTTP/1.1\r\nHost: " . address . "\r\n\r\n" |
153
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
7 resp <- "" |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
8 waiting <- true |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
9 headerText <- "" |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
10 rest <- "" |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
11 while: { waiting } do: { |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
12 data <- sock recv 4096 |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
13 resp <- resp . data |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
14 pos <- resp find: "\r\n\r\n" else: { -1 } |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
15 if: pos >= 0 { |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
16 waiting <- false |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
17 headerText <- resp from: 0 withLength: pos |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
18 rest <- resp from: pos + 4 |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
19 } |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
20 } |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
21 print: "Headers:\n" . headerText . "\n" |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
22 print: "Rest:\n" . rest . "\n" |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
23 _headers <- (headerText split: "\r\n") fold: (dict linear) with: :acc curLine{ |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
24 //TODO: support multiple headers with the same name |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
25 part <- curLine partitionOn: ":" |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
26 acc set: (part before) (trim: (part after)) |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
27 } |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
28 _closed <- false |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
29 #{ |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
30 |
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
31 } |
149
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 sock close |
153
075b1e71feff
A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents:
149
diff
changeset
|
33 rest |
149
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 } |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 } |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 } |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 client <- :address { |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 client: address usingPort: 80 |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 } |
7f442b3e4448
Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 } |