<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>@blog.justoneplanet.info &#187; Perl</title>
	<atom:link href="http://blog.justoneplanet.info/category/computer-language/perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.justoneplanet.info</link>
	<description>日々勉強</description>
	<lastBuildDate>Wed, 08 Feb 2012 02:57:17 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PerlでクロスドメインAjax用のプロキシ</title>
		<link>http://blog.justoneplanet.info/2007/07/26/%e5%88%9d%e5%bf%83%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeperl%ef%bc%881%ef%bc%89%e2%80%a6%e3%82%af%e3%83%ad%e3%82%b9%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3ajax%e7%94%a8%e3%81%ae%e3%83%97%e3%83%ad/</link>
		<comments>http://blog.justoneplanet.info/2007/07/26/%e5%88%9d%e5%bf%83%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeperl%ef%bc%881%ef%bc%89%e2%80%a6%e3%82%af%e3%83%ad%e3%82%b9%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3ajax%e7%94%a8%e3%81%ae%e3%83%97%e3%83%ad/#comments</comments>
		<pubDate>Thu, 26 Jul 2007 05:55:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://justoneplanet.sakura.ne.jp/wordpress/2007/07/26/%e5%88%9d%e5%bf%83%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeperl%ef%bc%881%ef%bc%89%e2%80%a6%e3%82%af%e3%83%ad%e3%82%b9%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3ajax%e7%94%a8%e3%81%ae%e3%83%97%e3%83%ad/</guid>
		<description><![CDATA[■前置き 自己責任でソースをご利用ください 正直、美しくない部分はある↓ 結構適当なのでサンプルソース程度に見てください ■ソースコード #!/usr/bin/perl #ここで送信データーを読み取る &#38;getF [...]]]></description>
			<content:encoded><![CDATA[<h4>■前置き</h4>
<ul>
<li>自己責任でソースをご利用ください</li>
<li>正直、美しくない部分はある↓</li>
<li>結構適当なのでサンプルソース程度に見てください</li>
</ul>
<h4>■ソースコード</h4>
<pre class="brush: perl;">
#!/usr/bin/perl
#ここで送信データーを読み取る
&amp;getFormData();
%query;
$query{'par1'} = 'ここにリクエスト用のパラメーター1';
$query{'par2'} = 'ここにリクエスト用のパラメーター2';
$query{'par3'} = 'ここにリクエスト用のパラメーター3';
$query{'par4'} = 'ここにリクエスト用のパラメーター4';
#下記はHTML上からname=&quot;data&quot;ハッシュキーを送信させ
#上記に該当するときは他サーバーとの通信を行う。
#それ以外はエラー処理。
if($query{$FORM{'data'}}){
    &amp;socketCom($query{＄FORM{'data'}});
}
else{
    &amp;errorPrint();
}
#=================================
#下記、他のサーバーとソケット通信するためのサブルーチン
sub socketCom{
    my($addr, $name);
    #下記、ホスト名を$addrへ
    $addr = (gethostbyname('api.gnavi.co.jp'));
    $name = pack(&quot;S n a4 x8″, 2, 80, $addr);
    #下記、ソケットの生成。
    #引数はソケットハンドラ、ソケットのドメイン、タイプ、プロトコル
    socket(GNAVIHANDLE, 2, 1, 0);
    ＃下記、接続。引数はハンドラ、IPアドレスとポート番号
    connect(GNAVIHANDLE, $name);
    binmode(GNAVIHANDLE);#バイナリモード
    select(GNAVIHANDLE);#出力先デフォルトハンドルの設定
    $| = 1;#バッファリングの設定（0以外でバッファリングを無効に）
    select(stdout);#出力先を初期の状態に
    #下記で接続先にリクエストを送信
    print GNAVIHANDLE &quot;GET http://api.gnavi.co.jp/ver1/$_[0] HTTP1.0\r\n\r\n&quot;;
    while(&lt;GNAVIHANDLE&gt;){
        #APIから返ってくるXMLをクライアントに返す時はこんな感じ
        #&lt;?xml以降をクライアントに送信
        if($_ =~/&lt;?xml/){$boolean = 1;}
        if($boolean){print $_;}#前行の処理が実行されるとprintが実行される
    }
    close(GNAVIHANDLE);#soketをclose
}
#————–
sub getFormData{
    my($query, $pair);
    if($ENV{'REQUEST_METHOD'} eq 'POST'){
        read(STDIN, $query, $ENV{'CONTENT_LENGTH'});;
    }else{$query = $ENV{'QUERY_STRING'};}
    foreach $pair(split(/&amp;/,$query)){
        my($key, $value) = split(/=/, $pair);
        $value =~ tr/+/ /;
        $FORM{$key} = $value;
    }
}
#————–
sub errorPrint{
    #エラー用処理の記述
}
#--------------
</pre>
<h4>■注意点</h4>
<ul>
<li>http://api.gnavi.co.jp/ver1/はぐるナビのAPIのアドレス</li>
<li>悪用される危険があるため、サーバーの接続先URLに任意の文字列が入力されてしまうソースは決して書かないで下さい</li>
<li>http://api.gnavi.co.jp/ver1/$_[0]部分にクライアント側から任意の文字列を入れられると危険</li>
<li>ソースの解説はコメント形式で上記に載せてみました（#以降～行末がコメント）</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2007/07/26/%e5%88%9d%e5%bf%83%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%aeperl%ef%bc%881%ef%bc%89%e2%80%a6%e3%82%af%e3%83%ad%e3%82%b9%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3ajax%e7%94%a8%e3%81%ae%e3%83%97%e3%83%ad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

