1 |
<? |
2 |
|
3 |
class HttpLib { |
4 |
|
5 |
function HttpLib() { |
6 |
|
7 |
} |
8 |
|
9 |
function redirect($args) { |
10 |
|
11 |
// define default parameters |
12 |
|
13 |
$method = 'GET'; |
14 |
$host = ''; |
15 |
$url = ''; |
16 |
$uri = ''; |
17 |
|
18 |
$bool_limitToArgs = 1; |
19 |
//$data = array(); |
20 |
$request_data = ''; |
21 |
$request_data_arr = array(); |
22 |
|
23 |
// process args to parameters |
24 |
|
25 |
isset($args['method']) && ($method = $args['method']); |
26 |
isset($args['host']) && ($host = $args['host']); |
27 |
isset($args['url']) && ($url = $args['url']); |
28 |
isset($args['limitToArgs']) && ($bool_limitToArgs = $args['limitToArgs']); |
29 |
|
30 |
// determine/merge data to be passed on |
31 |
// there are three different kinds of data here: |
32 |
// a) data which is already set from "HTTP_GET_VARS" or "HTTP_POST_VARS" (base) (linked to "$tracking-><state>") |
33 |
// b) data which should modify this (base-)data via "$args['data']" (must be converted to "$request_data"-format) |
34 |
// c) data which should modify this (base-)data via "$args['request_data']" (is already in proper "$request_data"-format) |
35 |
|
36 |
// a) |
37 |
if (!$bool_limitToArgs) { |
38 |
global $HTTP_GET_VARS, $HTTP_POST_VARS; |
39 |
$request_data_arr = array_merge($HTTP_GET_VARS, $HTTP_POST_VARS); |
40 |
} |
41 |
|
42 |
// b) |
43 |
if (isset($args['data'])) { |
44 |
$request_data_arr = array_merge($request_data_arr, $args['data']); |
45 |
unset($request_data_arr['x']); |
46 |
unset($request_data_arr['y']); |
47 |
} |
48 |
|
49 |
// c) (TODO) |
50 |
// TODO: merge both together!!! (for this we'd need a "queryString2ComplexHash()"-function) |
51 |
// isset($args['request_data']) && ($request_data = $args['request_data']); |
52 |
|
53 |
|
54 |
// build "request-data"-string |
55 |
$request_data = $this->getRequestString($request_data_arr); |
56 |
|
57 |
// modify parameters |
58 |
|
59 |
if (!$host) { |
60 |
global $SERVER_NAME; |
61 |
$host = $SERVER_NAME; |
62 |
} |
63 |
if (!$url) { |
64 |
global $PHP_SELF; |
65 |
$url = $PHP_SELF; |
66 |
} |
67 |
|
68 |
/* |
69 |
// Replace 'http://' with the empty string |
70 |
// Get the Host address substring |
71 |
// Get the URI of the desired Resource |
72 |
$url = preg_replace("@^http://@i", "", $url); |
73 |
$host = substr($url, 0, strpos($url, "/")); |
74 |
$uri = strstr($url, "/"); |
75 |
*/ |
76 |
|
77 |
// do redirection |
78 |
|
79 |
switch(strtolower($method)) { |
80 |
|
81 |
case 'get': |
82 |
|
83 |
// build request-string |
84 |
$request_string = $url . '?' . $request_data; |
85 |
//print $request_string . "<br>"; |
86 |
//exit; |
87 |
Header('Location: ' . $request_string); |
88 |
exit; |
89 |
break; |
90 |
|
91 |
case 'post': |
92 |
|
93 |
// DOES NOT WORK!!!! |
94 |
// CAN NOT WORK, because sending a request from here (php-script) will not get the same session associated with the server |
95 |
// maybe we can solve this differently, but for now: forget about POSTing |
96 |
|
97 |
// build cookie-data |
98 |
$varname_PhpSessionId = ini_get('session.name'); |
99 |
global $$varname_PhpSessionId; |
100 |
$sessionid = $$varname_PhpSessionId; |
101 |
$cookie = $varname_PhpSessionId . "=" . $sessionid . ";"; |
102 |
|
103 |
// build request-string |
104 |
$request_header = |
105 |
"POST " . $url . " HTTP/1.1\r\n" . |
106 |
"Host: " . $host . "\r\n" . |
107 |
//"Cookie: " . $cookie . "\r\n" . |
108 |
"Content-type: application/x-www-form-urlencoded\r\n" . |
109 |
"Content-length: " . strlen($request_data) . "\r\n" . |
110 |
"\r\n" . |
111 |
$request_data . |
112 |
"&PHPSESSID=$sessionid" |
113 |
; |
114 |
|
115 |
// debug request-header |
116 |
print $request_header . "<br>"; |
117 |
//exit; |
118 |
|
119 |
// send request (post) and get response |
120 |
if ($response = $this->request($host, 80, $request_header)) { |
121 |
// output response |
122 |
echo "response-begin<br>"; |
123 |
echo $response; |
124 |
echo "<br>"; |
125 |
echo "response-end<br>"; |
126 |
} |
127 |
|
128 |
|
129 |
break; |
130 |
|
131 |
} |
132 |
|
133 |
} |
134 |
|
135 |
function request($host, $port, $request_header) { |
136 |
|
137 |
// open connection to server |
138 |
$fp = fsockopen($host, $port, $err_num, $err_msg, 30); |
139 |
if ($fp) { |
140 |
|
141 |
// send post-request |
142 |
fputs($fp, $request_header); |
143 |
|
144 |
// get response |
145 |
$response = ''; |
146 |
while (!feof($fp)) |
147 |
$response .= fgets($fp, 1024); |
148 |
fclose($fp); |
149 |
|
150 |
return $response; |
151 |
|
152 |
} |
153 |
|
154 |
} |
155 |
|
156 |
|
157 |
function getRequestString($requestData) { |
158 |
$arr_subkeys = array(); |
159 |
$simpleHash = nestedHash2simpleHash($requestData, 0, &$arr_subkeys); |
160 |
$retval = ''; |
161 |
while( list($key, $value) = each($simpleHash) ) { |
162 |
if (!is_array($value)) { |
163 |
$retval .= urlencode($key) . '=' . urlencode($value) . '&'; |
164 |
} |
165 |
} |
166 |
$retval = substr($retval, 0, strlen($retval) - 1); |
167 |
return $retval; |
168 |
} |
169 |
|
170 |
|
171 |
} |
172 |
|
173 |
?> |