OSDN Git Service

エッジの同期を追加。まだ不完全。
[chnosproject/AI004.git] / ainet.php
1 <?php
2 //Args:
3 //      cmd
4 //      url
5
6 //Retv[0]:operation exitcode
7         //ErrorCode:
8
9 if(!isset($_GET['cmd'])){
10         exit("[463571]");
11 }
12 $cmd = $_GET['cmd'];
13
14 if(strcmp($cmd, 'httpreq') == 0){
15         if(!isset($_GET['url'])){
16                 exit("[571765]");
17         }
18         $url = $_GET['url'];
19         $response = sendHTTPQuery($url);
20         echo($response);
21 } else{
22         exit("[571465]");
23 }
24
25 // from http://www.spencernetwork.org/memo/tips-3.php
26 /*
27         $url     : http://から始まるURL( http://user:pass@host:port/path?query )
28         $method  : GET, POST, HEADのいずれか(デフォルトはGET)
29         $headers : 任意の追加ヘッダ
30         $post    : POSTの時に送信するデータを格納した配列("変数名"=>"値")
31         */
32 function sendHTTPQuery($url, $method="GET", $headers="", $post=array(""))
33 {
34         /* URLを分解 */
35         $parsedURL = parse_url($url);
36         
37         //URLの存在を確認(fsockopenのエラー抑制のため)
38         if ($parsedURL && $parsedURL['host']) {
39                 $ip = getHostByName($parsedURL['host']);
40                 $long = ip2long($ip);
41                 
42                 if ($long === false || $ip !== long2ip($long)) {
43                         //Cannot resolve domain name
44                         exit("[747332]");
45                 } else {
46                         //ValidURL
47                 }
48         } else {
49                 //Invalid URL
50                 exit("[747914]");
51         }
52         
53         if(!$parsedURL){
54                 return false;
55         }
56         
57         /* クエリー */
58         if (isset($parsedURL['query'])) {
59                 $parsedURL['query'] = "?".$parsedURL['query'];
60         } else {
61                 $parsedURL['query'] = "";
62         }
63         
64         /* デフォルトのポートは80 */
65         if (!isset($parsedURL['port'])) $parsedURL['port'] = 80;
66         
67         /* リクエストライン */
68         $request  = $method." ".$parsedURL['path'].$parsedURL['query']." HTTP/1.0\r\n";
69         
70         /* リクエストヘッダ */
71         $request .= "Host: ".$parsedURL['host']."\r\n";
72         $request .= "User-Agent: PHP/".phpversion()."\r\n";
73         
74         /* Basic認証用のヘッダ */
75         if (isset($parsedURL['user']) && isset($parsedURL['pass'])) {
76                 $request .= "Authorization: Basic ".base64_encode($parsedURL['user'].":".$parsedURL['pass'])."\r\n";
77         }
78         
79         /* 追加ヘッダ */
80         $request .= $headers;
81         
82         /* POSTの時はヘッダを追加して末尾にURLエンコードしたデータを添付 */
83         if (strtoupper($method) == "POST") {
84                 while (list($name, $value) = each($post)) {
85                         $POST[] = $name."=".urlencode($value);
86                 }
87                 $postdata = implode("&", $POST);
88                 $request .= "Content-Type: application/x-www-form-urlencoded\r\n";
89                 $request .= "Content-Length: ".strlen($postdata)."\r\n";
90                 $request .= "\r\n";
91                 $request .= $postdata;
92         } else {
93                 $request .= "\r\n";
94         }
95         
96         /* WEBサーバへ接続 */
97         $fp = fsockopen($parsedURL['host'], $parsedURL['port']);
98         
99         /* 接続に失敗した時の処理 */
100         if (!$fp) {
101                 die("ERROR\n");
102         }
103         
104         /* 要求データ送信 */
105         fputs($fp, $request);
106         
107         /* 応答データ受信 */
108         $response = "";
109         while (!feof($fp)) {
110                 $response .= fgets($fp, 65535);
111         }
112         
113         /* 接続を終了 */
114         fclose($fp);
115         
116         /* ヘッダ部分とボディ部分を分離 */
117         $DATA = split("\r\n\r\n", $response, 2);
118         
119         /* リクエストヘッダをコメントアウトして出力 */
120         //echo "<!--\n".$request."\n-->\n";
121         
122         /* レスポンスヘッダをコメントアウトして出力 */
123         //echo "<!--\n".$DATA[0]."\n-->\n";
124         //echo($DATA[0]);
125         
126         /* メッセージボディを出力 */
127         echo $DATA[1];
128 }
129
130 ?>