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