OSDN Git Service

phpを介してインターネットからページを読み込む機能を追加。
[chnosproject/AI004.git] / ainet.php
diff --git a/ainet.php b/ainet.php
new file mode 100644 (file)
index 0000000..8044125
--- /dev/null
+++ b/ainet.php
@@ -0,0 +1,130 @@
+<?php
+//Args:
+//     cmd
+//     url
+
+//Retv[0]:operation exitcode
+       //ErrorCode:
+
+if(!isset($_GET['cmd'])){
+       exit("[463571]");
+}
+$cmd = $_GET['cmd'];
+
+if(strcmp($cmd, 'httpreq') == 0){
+       if(!isset($_GET['url'])){
+               exit("[571765]");
+       }
+       $url = $_GET['url'];
+       $response = sendHTTPQuery($url);
+       echo($response);
+} else{
+       exit("[571465]");
+}
+
+// from http://www.spencernetwork.org/memo/tips-3.php
+/*
+       $url     : http://から始まるURL( http://user:pass@host:port/path?query )
+       $method  : GET, POST, HEADのいずれか(デフォルトはGET)
+       $headers : 任意の追加ヘッダ
+       $post    : POSTの時に送信するデータを格納した配列("変数名"=>"値")
+       */
+function sendHTTPQuery($url, $method="GET", $headers="", $post=array(""))
+{
+       /* URLを分解 */
+       $parsedURL = parse_url($url);
+       
+       //URLの存在を確認(fsockopenのエラー抑制のため)
+       if ($parsedURL && $parsedURL['host']) {
+               $ip = getHostByName($parsedURL['host']);
+               $long = ip2long($ip);
+               
+               if ($long === false || $ip !== long2ip($long)) {
+                       //Cannot resolve domain name
+                       exit("[747332]");
+               } else {
+                       //ValidURL
+               }
+       } else {
+               //Invalid URL
+               exit("[747914]");
+       }
+       
+       if(!$parsedURL){
+               return false;
+       }
+       
+       /* クエリー */
+       if (isset($parsedURL['query'])) {
+               $parsedURL['query'] = "?".$parsedURL['query'];
+       } else {
+               $parsedURL['query'] = "";
+       }
+       
+       /* デフォルトのポートは80 */
+       if (!isset($parsedURL['port'])) $parsedURL['port'] = 80;
+       
+       /* リクエストライン */
+       $request  = $method." ".$parsedURL['path'].$parsedURL['query']." HTTP/1.0\r\n";
+       
+       /* リクエストヘッダ */
+       $request .= "Host: ".$parsedURL['host']."\r\n";
+       $request .= "User-Agent: PHP/".phpversion()."\r\n";
+       
+       /* Basic認証用のヘッダ */
+       if (isset($parsedURL['user']) && isset($parsedURL['pass'])) {
+               $request .= "Authorization: Basic ".base64_encode($parsedURL['user'].":".$parsedURL['pass'])."\r\n";
+       }
+       
+       /* 追加ヘッダ */
+       $request .= $headers;
+       
+       /* POSTの時はヘッダを追加して末尾にURLエンコードしたデータを添付 */
+       if (strtoupper($method) == "POST") {
+               while (list($name, $value) = each($post)) {
+                       $POST[] = $name."=".urlencode($value);
+               }
+               $postdata = implode("&", $POST);
+               $request .= "Content-Type: application/x-www-form-urlencoded\r\n";
+               $request .= "Content-Length: ".strlen($postdata)."\r\n";
+               $request .= "\r\n";
+               $request .= $postdata;
+       } else {
+               $request .= "\r\n";
+       }
+       
+       /* WEBサーバへ接続 */
+       $fp = fsockopen($parsedURL['host'], $parsedURL['port']);
+       
+       /* 接続に失敗した時の処理 */
+       if (!$fp) {
+               die("ERROR\n");
+       }
+       
+       /* 要求データ送信 */
+       fputs($fp, $request);
+       
+       /* 応答データ受信 */
+       $response = "";
+       while (!feof($fp)) {
+               $response .= fgets($fp, 65535);
+       }
+       
+       /* 接続を終了 */
+       fclose($fp);
+       
+       /* ヘッダ部分とボディ部分を分離 */
+       $DATA = split("\r\n\r\n", $response, 2);
+       
+       /* リクエストヘッダをコメントアウトして出力 */
+       //echo "<!--\n".$request."\n-->\n";
+       
+       /* レスポンスヘッダをコメントアウトして出力 */
+       //echo "<!--\n".$DATA[0]."\n-->\n";
+       //echo($DATA[0]);
+       
+       /* メッセージボディを出力 */
+       echo $DATA[1];
+}
+
+?>
\ No newline at end of file