Rev 1959 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 1959 | Rev 2091 | ||
|---|---|---|---|
| 1 | 1 | ||
| 2 | Http_Buffers = {}; |
2 | Http_Buffers = {}; |
| 3 | 3 | ||
| 4 | function Http_Request(url, callback) |
4 | function Http_Request(url, callback) |
| 5 | { |
5 | { |
| 6 | var parsed_url = Http_ParseUrl(url); |
6 | var parsed_url = Http_ParseUrl(url); |
| 7 | 7 | ||
| 8 | var socket_id = Socket_Connect(parsed_url["host"], parsed_url["port"], function(socket_id, data) |
8 | var socket_id = Socket_Connect(parsed_url["host"], parsed_url["port"], function(socket_id, data) |
| 9 | { |
9 | { |
| 10 | ///FIXME: This is a bit ugly code... also not fully HTTP/1.1 compliant look at http://www.jmarshall.com/easy/http/ |
10 | ///FIXME: This is a bit ugly code... also not fully HTTP/1.1 compliant look at http://www.jmarshall.com/easy/http/ |
| 11 | 11 | ||
| 12 | Http_Buffers[socket_id] += data; |
12 | Http_Buffers[socket_id] += data; |
| 13 | 13 | ||
| 14 | }, function(socket_id, state) |
14 | }, function(socket_id, state) |
| 15 | { |
15 | { |
| 16 | if (state == |
16 | if (state == SOCKET_STATE_DISCONNECTED) |
| 17 | { |
17 | { |
| 18 | var data = Http_Buffers[socket_id]; |
18 | var data = Http_Buffers[socket_id]; |
| 19 | 19 | ||
| 20 | delete Http_Buffers[socket_id]; |
20 | delete Http_Buffers[socket_id]; |
| 21 | 21 | ||
| 22 | var pos = data.indexOf("\r\n\r\n"); |
22 | var pos = data.indexOf("\r\n\r\n"); |
| 23 | 23 | ||
| 24 | var header_data = data.substr(0, pos); |
24 | var header_data = data.substr(0, pos); |
| 25 | var content_data = data.substr(pos+2); |
25 | var content_data = data.substr(pos+2); |
| 26 | 26 | ||
| 27 | var header_lines = header_data.split("\r\n"); |
27 | var header_lines = header_data.split("\r\n"); |
| 28 | 28 | ||
| 29 | var header = []; |
29 | var header = []; |
| 30 | var result = header_lines[0]; |
30 | var result = header_lines[0]; |
| 31 | 31 | ||
| 32 | for (var n = 1; n < header_lines.length; n++) |
32 | for (var n = 1; n < header_lines.length; n++) |
| 33 | { |
33 | { |
| 34 | var header_parts = header_lines[n].split(":", 2); |
34 | var header_parts = header_lines[n].split(":", 2); |
| 35 | header[header_parts[0]] = header_parts[1].trim(' '); |
35 | header[header_parts[0]] = header_parts[1].trim(' '); |
| 36 | } |
36 | } |
| 37 | 37 | ||
| 38 | callback(socket_id, result, header, content_data); |
38 | callback(socket_id, result, header, content_data); |
| 39 | } |
39 | } |
| 40 | }); |
40 | }); |
| 41 | 41 | ||
| 42 | if (socket_id > 0) |
42 | if (socket_id > 0) |
| 43 | { |
43 | { |
| 44 | var request = ""; |
44 | var request = ""; |
| 45 | 45 | ||
| 46 | Http_Buffers[socket_id] = ""; |
46 | Http_Buffers[socket_id] = ""; |
| 47 | 47 | ||
| 48 | request = "GET " + parsed_url['path'] + " HTTP/1.1\r\n"; |
48 | request = "GET " + parsed_url['path'] + " HTTP/1.1\r\n"; |
| 49 | request += "Host: " + parsed_url['host'] + ":" + parsed_url['port'] + "\r\n"; |
49 | request += "Host: " + parsed_url['host'] + ":" + parsed_url['port'] + "\r\n"; |
| 50 | request += "User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090730 SUSE/3.5.2-1.1 Firefox/3.5.2\r\n"; |
50 | request += "User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090730 SUSE/3.5.2-1.1 Firefox/3.5.2\r\n"; |
| 51 | request += "Connection: close\r\n"; |
51 | request += "Connection: close\r\n"; |
| 52 | request += "\r\n"; |
52 | request += "\r\n"; |
| 53 | 53 | ||
| 54 | Socket_Send(socket_id, request); |
54 | Socket_Send(socket_id, request); |
| 55 | } |
55 | } |
| 56 | else |
56 | else |
| 57 | { |
57 | { |
| 58 | Log("Could not connect to " + url + "\n"); |
58 | Log("Could not connect to " + url + "\n"); |
| 59 | } |
59 | } |
| 60 | 60 | ||
| 61 | return socket_id; |
61 | return socket_id; |
| 62 | } |
62 | } |
| 63 | 63 | ||
| 64 | function Http_ParseUrl(url) |
64 | function Http_ParseUrl(url) |
| 65 | { |
65 | { |
| 66 | var result = {}; |
66 | var result = {}; |
| 67 | result['port'] = 80; |
67 | result['port'] = 80; |
| 68 | result['path'] = "/"; |
68 | result['path'] = "/"; |
| 69 | 69 | ||
| 70 | var firstSlash = url.indexOf('/'); |
70 | var firstSlash = url.indexOf('/'); |
| 71 | 71 | ||
| 72 | if (firstSlash == -1) |
72 | if (firstSlash == -1) |
| 73 | { |
73 | { |
| 74 | result['host'] = url; |
74 | result['host'] = url; |
| 75 | } |
75 | } |
| 76 | else |
76 | else |
| 77 | { |
77 | { |
| 78 | result['host'] = url.substr(0, firstSlash); |
78 | result['host'] = url.substr(0, firstSlash); |
| 79 | result['path'] = url.substr(firstSlash); |
79 | result['path'] = url.substr(firstSlash); |
| 80 | } |
80 | } |
| 81 | 81 | ||
| 82 | var firstColon = result['host'].indexOf(':'); |
82 | var firstColon = result['host'].indexOf(':'); |
| 83 | 83 | ||
| 84 | if (firstColon != -1) |
84 | if (firstColon != -1) |
| 85 | { |
85 | { |
| 86 | result['port'] = result['host'].substr(firstColon+1); |
86 | result['port'] = result['host'].substr(firstColon+1); |
| 87 | result['host'] = result['host'].substr(0, firstColon); |
87 | result['host'] = result['host'].substr(0, firstColon); |
| 88 | } |
88 | } |
| 89 | 89 | ||
| 90 | return result; |
90 | return result; |
| 91 | } |
91 | } |
| 92 | 92 | ||