• ベストアンサー

CGIから別サーバーのCGIの呼び出し

以下の二つのサーバーでCGIを動作させようと考えています。  サーバーA:ユーザーからアクセスできる。  サーバーB:サーバーAからアクセスでき、ユーザーからはアクセスできない。 この環境で (1)サーバーAでリクエストを受け、簡単な処理をする。 (2)サーバーA上のCGIからサーバーB上のCGIを呼び出す。 (3)サーバーB上で処理(etc. メールの送信)を行い、処理結果をサーバーAのCGIに返す。 (4)サーバーA上で簡単な処理を行い、結果をユーザーに表示する というような処理を考えています。 perlでは、このような処理を実装することは可能でしょうか? サーバーAからサーバーBにあるスクリプトファイルを読み込んで、サーバーAで実行するということはできそうなのですが、サーバーB上のCGIはサーバーBで実行するというようなことができるのかがわかりません。 初心者的な質問で申し訳ありませんが、よろしくお願いします。

  • CGI
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 無理やり実装することは可能ですけど、面倒ですよ?  自分でソケットを開いてHTTPで通信するんです。

Dr_Pepper
質問者

お礼

回答ありがとうございます。 ちょっとスキル的に難しそうなので、別の方法を考えてみます。

その他の回答 (1)

回答No.2

基本的に#1さんの言われるとおりで サーバーAのperlスクリプト中で、 普通のブラウザが行うのと同じような通信をサーバーBに対して行うしか有りません ・perlでsocket   http://ash.jp/perl/socket_http.htm ・LWP   http://homepage3.nifty.com/hippo2000/perltips/LWP.html ・lynxなどコマンドラインから使えるブラウザをperlスクリプト中で呼び出す ##気になったのですが >サーバーBにあるスクリプトファイルを読み込んで、 ネットワーク的にAとBがどのような関係にあるのでしょうか? 同じLAN内? それとも全く別の場所?

Dr_Pepper
質問者

補足

ご回答ありがとうございます。 サーバーBはサーバーAと同じLAN内です。 メール送信等の処理は、ユーザーからは直接アクセスできないサーバー(外にはでれる)で処理したいと考えています。

関連するQ&A

  • CGIへのアクセスが集中した場合にアクセスを一時的に制限したり、エラーメッセージを表示したり、予備のCGIに飛ばす方法。

    CGIへのアクセスが集中した場合に、メッセージを表示し、アクセスを制限するサイトなどを目にしますが、どのようにして実現しているのでしょうか。例えば、flockなどの排他処理によって、一定時間内は1ユーザーからのアクセスしか受け付けないといった処理は可能かと思いますが、3ユーザーまでのアクセスのみ受け付けるといった方法はあるのでしょうか。 また、サーバダウンなどにより、CGIが動作しない場合に、エラーメッセージを表示したり、予備のCGIに飛ばす方法はありますでしょうか。 例えば、Aサーバのmain.cgiを動作させたい場合に、まずBサーバのpre.cgiにとばし、Bサーバのpre.cgiからAサーバのmain.cgiへのアクセスを試み、Aサーバがダウンしている為にアクセスに失敗した場合に、Bサーバ内のerroor.htmやsub.cgiに飛ばすことなどはできるのでしょうか。 できれば、CGI(perl)で実現したいのですが、有効な方法がございましたら、恐れ入りますが、教えていただけないでしょうか。もしも可能でしたら、簡単なサンプルのスクリプト等を添えていただけると大変助かります。何卒よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • サーバーAでcgiで認証し、サーバーBへ飛ばす

    サーバーAでcgiでユーザーIDとパスワードで認証し、サーバーBの一般からアクセスされたくないURLに飛ばす方法を教えてください。 サーバーB側で、どのような受け口を作ればよいのかで悩んでいます。 cgi(Perl)のスキルと、Apacheのスキル少々です。 ヒントだけでもいただけましたら後は勉強します。 (1),サーバーAで、cgi(Perl)を使用してユーザー認証します。 (2),認証OKの場合、cgiからサーバーBへリダイレクトします。 (3),サーバーBでは、上記の認証OKのアクセスだけを許可します。 サーバーBには、htmlやpdfなどを置いています。 これを、.htaccessのREFERER認証を使用して、サーバーAのREFERERを持ったものだけを 通す設定にしてみました。 この場合、最初に呼んだhtmlは表示されますが、そのhtmlからimgタグで呼んだ画像などは 表示されません。 また、そのhtmlから同じディレクトリ内の他のhtmlへ飛ぶこともできません。 特にREFERER認証に拘りません。何か良い方法はありませんでしょうか。

  • サーバーでCGIを動作させるには?

    自宅サーバーでCGIを動作させたいのですが、うまく動作しません。 ○サーバー環境 OS:Windows Server 2003 Web Edition SP1 CPU:Intel Xeon 2.8GHz メモリ:1GB RAM ○現在の状況 htmlは、問題なく動作してます。 cgiを実行すると、エラー404となります。 ○CGI動作にあたって行った作業 (1)ASPの実行を許可しました (2)Perl構成にあたり、ActiveState社のActivePerl-5.8.820-MSWin32-x86-274739.msiをダウンロードし、Dフォルダにインストールしました。 (3)IISマネージャで、「Webサービス拡張」→「Perl CGI Extension」を許可しました。 (4)IISマネージャで、「Webサービス拡張」→「すべての不明なCGI拡張」を許可しました。 (5)実行アクセス権を設定するために、実行するCGIを格納するディレクトリの「実行アクセス許可」を「スクリプトおよび実行可能なファイル」としました。 (6)CGI拡張子と実行可能ファイルを関連付けるために、実行するCGIを格納するディレクトリの「アプリケーションの設定」→「構成」→「アプリケーションの拡張子」→「追加」で、 実行可能ファイル「D\Perl\bin\perl.exe"%s"%s」 拡張子「.cgi」としました。 ○CGIが動作するか確認するために、サンプルCGIを作成し、上記設定を行ったディレクトリ以下に配置しました。 ○結果 クライアントで、http://サーバー名/ディレクトリ名/ファイル名 と入力すると、エラー404 ページが見つかりません。と出ます。 間違った操作や、考えられる間違い箇所がありましたら、指摘ください。

  • 別サーバーのcgiを実行させる

    あるサーバーで動作しているcgiスクリプトから、別のサーバーに置いてあるcgiスクリプトを実行させる方法はあるでしょうか? require 'http://…/…/test.cgi'; としても実行することは出来ませんでした。 googleで検索したところrequireではURL指定ができないと解説しているサイトがありましたので、requireを使わずに、(CGI.pm等の標準モジュール(?))なども使わないで他のサーバーに設置したcgiを動作させる方法があれば、教えていただきたいです。

    • ベストアンサー
    • CGI
  • 異なるサーバー間の通信について

    異なる2つのサーバーがあり(A,Bとする) Aはファイヤーウォールの外側に、Bは内側にいます。 ファイヤーウォールはポート80のみが開いて、サーバーBは Aからのみ繋がるように設定されています。 Aサーバはユーザーからのデータ入力を受け付け、Bサーバーにある プログラムにデータを渡し、データベースサーバーからデータを取得し 結果を返すプログラムを書いているのですが、良い方法があればおしえてください。 サーバー環境:A:CentOS+Perl5.8.0 サーバー環境:B:CentOS+Perl5.8.0+DBI:pg+PostgreSQL8.1 となっています。 AからBに対しては、どのように値を渡せばいいのか? Bにあるスクリプトはどうやって結果を返せばいいのか? そもそもCGI(Perl)だけでこのようなことが可能なのか? 教えていただけたらと思います。 よろしくお願いいたします。

  • cgi(perl)からphp呼出

    どなたかご教授ください。 perlのcgiからsystem関数でphp(コマンドで実行可能なコード)を実行して返値を得たいのですが perlのcgiの実行結果では画面に文字化けを起こしたような結果が帰ってきます。 cgi(perl)からphpを実行するにはどのように すればいいのでしょうか? ご教授ください。

    • 締切済み
    • PHP
  • 別サーバーのcgiへバイナリデータを送る方法

    サーバーAに、バイナリデータがあります。 これをサーバーBのcgiへデータを渡したいのですが、方法を教えてください。 HTMLで書くと、以下のようにc:\data.binを<form>でcgiに送信するようなイメージです。しかし、<input file>タグではセキュリティーのためvalueでファイルを指定することができません。 ここのc:\data.binは、ファイル名が変動するため、人間に手で選択させることはさせたくないです。 <form action="http://www.サーバーB.jp/Server_B.cgi" enctype="multipart/form-data" method="post"> <input type="file" value="c:\data.bin"> <input type="submit" value="サーバーAに送信"> </form> これを、cgi(Perl)を使用して、同じようなものを書くことはできますでしょうか? httpヘッダを書いて、その後ろにデータを送信して、、といった感じでできるような気がするのですが、 httpヘッダの書き方が分かりません。 受け側のサーバーBのcgiでは、CGI_Lite.pmを使用してバイナリデータを受信します。 通常、バイナリのデータ送信はftpを使用するのだと思いますが、相手側がftpに対応していません。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • 自前サーバでCGIを~

     まずはLAN内だけで掲示板などのCGIを実行できるようにしてみよう、ということでApacheを使ってCGIの設定をしているんですが、ブラウザからCGIファイルを起動してもInternal Server Errorと出てしまいます。よってそれ以前ということで・・・  コマンドラインから「perl test.cgi」のようにCGIファイルを実行してみるとちゃんと動作するんですが、「type -a perl」で検索したフルパスをそのままCGIファイルに「#!/usr/bin/perl」などのように書いても、ファイルがコマンド化されてくれません。でも、perlの実行ファイルは存在していました。  これは、どうすれば解決できるのでしょうか?

  • カウンタCGIを別のサーバーにおいて動かすことは・・・

    今日からVectorの作者ホームページサービスにホームページを移動したのですが、ここはCGIは使えないので、いままでのところで使ってたカウンタが使えなくなってしまいました。 そこで、今まで使っていた、CGIが使えるサーバーにカウンタのスクリプトを置いてVectorのアクセスをカウントすることは出来るのでしょうか? もしできるなら、方法をお教えください。宜しくお願いします。

    • ベストアンサー
    • CGI
  • 500 Internal Server Error

    500 Internal Server Errorが出ます。 サーバ:CentOS6.4 サーバ側の文字コード:UTF-8 perlのパス:/usr/bin/perl index.cgiの文字コード:LF (サーバ上で直接作成) index.cgiのパーミッション:777 (パーミッションの問題を避けるためわざと、777に設定) ここで、サーバ上で直接実行 perl /var/www/html/index.cgi すると、正しく処理の結果が返ってきてエラーは出ません。 しかし、クライアントのブラウザでindex.cgiにアクセスすると、500 Internal Server Errorが出ます。 なお、index.cgiを設置するディレクトリはApacheで以下のように設定しcgiスクリプトを有効にしています。 <Directory “/var/www/html”> Options FollowSymLinks ExecCGI </Directory> AddHandler cgi-script .cgi .pl #AddDefaultCharset UTF-8 ******************************************************* 【/var/www/html/index.cgi】 #!/usr/bin/perl print "Content-type: text/html"; print "<html>"; print "<body>"; print "<p>"; print "CGI"; print "</p>"; print "</body>"; print "</html>"; スクリプトの文法に問題があれば、サーバ上で直接実行させた時点でエラーを吐きそうですし、 パーミッションは777にしていますし、Apacheの設定もcgiを有効にしているので 他に500 Internal Server Errorが出る原因が掴めません。 Apacheの設定で、#AddDefaultCharset UTF-8 として文字セットを無効にした場合は CGIスクリプトの方で何か追加してやらないと、文字化け以前の問題で必ず500 Internal Server Errorを吐くんですかね? ご指導のほどよろしくお願い致します。

    • ベストアンサー
    • CGI

専門家に質問してみよう