電子書籍の厳選無料作品が豊富!

お世話になります。

私の勤める会社では社員向けにHPである数字を見せています。
ガードは掛かっていませんのでアドレスが分かれば誰にでも見られてしまいます。
実際、見られてどうのという数字ではありません、社員にしか意味がありませんので。
でも社員にとっては、その数字を使うなり加工するなりして生かさなければなりません。
現在は、毎回数字を控え、手作業によりFTPで私の個人的なサーバーに保存し、
その後取り込んだ数字を使って数ステップのcgiが動いています。
これが大変なので、出来ればシステム化したいのです。
どのように対応すればよいでしょうか。
駄目ならこれまで通り手作業保存を続けないといけません。

条件として、
1.cgiは見よう見まねで書いたことがあります。
 (サンプルをカスタマイズする程度で、一からは書けません)
2.データはテキストで、もちろんアドレスも分かります。
  (当然会社のサーバーに格納されています)
3.私の個人的なサーバーはcgiはokですが、lwpは使えません。
4.会社に依頼して個人宛に送信して貰うということも期待できません。

宜しくお願いします。

A 回答 (5件)

例えば、

http://www.abcde.co.jp/testdata/test.txtが見たいテキストだと
すると、サンプルの$hostに'www.abcde.co.jp'、pathに'/testdata/test.txt'を
セットして実行してやれば、そのテキストファイルの内容がゲットできます。
テキストファイルではなく、Webページに表示された内容ならやはりpathに
ホストを除いたアドレスの残り部分をセットしてやれば同様です。
そのままファイルに出力しても良いし、適当な場所だけ抜き出して保存しても
それはロジック次第で自由です。

それから、フリーのCGIを提供されているサイトを一つ紹介しておきます。
Socketを使用したCGIも多いので、ダウンロードして見るだけでもかなり
参考になると思います。

前の質問を締めずに次の質問をするとマナー違反と指摘する人も
居ますので注意してください。
(そういう指摘を時々見かけますので)

参考URL:http://www.ln-lab.net/
    • good
    • 0
この回答へのお礼

Yeti21様、最後まで細かな親切、有り難うございました。
全て了解しました。
フリーウェアのcgiは使いこなせるか全くこれからですが、とにかく勉強してみます。
また、質問を締め切りしないで次に質問をすることのマナー違反は知りませんでした、勉強になりました。

うまくいったときにはお礼を言う場がないのですが、分からない場合はまた新たな質問をさせていただきますので、その時にも今回同様、宜しくお願いします。
どうも有り難うございます、お世話になりました。

お礼日時:2006/10/20 05:51

少し考えては見ますがすぐには思いつきません。


この質問も既に見る人も少なくなっていると思いますので、
一旦締め切って再度現状を記載して質問してみてはどうでしょうか?
その方が多くの人の目に付くと思います。
その際、サーバの環境(OSやhttpサーバの種類やバージョン等)も
提示した方が良いと思います。

この回答への補足

それから、書くのを漏れてしまいましたが、
そもそもやりたいことは、会社にあるテキストデータ(数字)を私の個人的なサーバーに格納することです。
soketという機能で解決できるのでしょうか。
何回も済みませんが、宜しくお願いします。

補足日時:2006/10/19 22:15
    • good
    • 0
この回答へのお礼

Yeti21さん、どうも有り難うございました。
了解です。
これまでの動きをまとめて新たに再度質問を考えてみます。
ここももう少し開けておきたいのですが。

ところで、
ジャンルは何処が宜しいのでしょうか。
perl、cgi、HTMLしか思いつかないのですが。
私もsoketを勉強してみたいと思います。

お礼日時:2006/10/19 22:13

ANHTTPDは使ったことが無いので、環境を作ってみました。


(ANHTTPDとActivePerlは最新版です)

補足に書かれたスクリプトをそのまま実行してみましたが、問題無く実行されました。
ただし、私の環境ではプロキシを通ることができないためlocalhostで実行しました。
www.yahoo.co.jpでも実行できましたが、HTTPのGETでエラーになります。(これはあくまで私の環境の問題です)

ANHTTPDかPerlの設定かバージョンの問題だと思います。
403のエラーならもう少しエラーが特定できるメッセージが出ていると思いますが。

結果は以下の通りです。
step1
host=localhost, port=80, url=
step2

step3

step4

step5

step6
HTTP/1.1 200 Document follows MIME-Version: 1.0 Server: AnWeb/1.42p Date: Thu, 19 Oct 2006 08:51:25 GMT Content-Type: text/html Last-Modified: Thu, 19 Oct 2006 08:51:25 GMT Connection: close
step7

step8

test end
    • good
    • 0
この回答へのお礼

毎回有り難うございます。
お礼、補足のあとトレースしていましたら、エラーの原因が分かりました。
cgiのパーミッションを設定漏れしていました。
実行が入っていませんでした。
その後にやってみたのが以下の通りです。

step1
host=www.yahoo.co.jp, port=, url=
step2

step3

ということで、エラーは消えましたが、step3で止まってしまいます。
これからソケットの設定に掛かるところです。
これこそ私のサーバーがソケットを許していないのでしょうか。

AN HTTPD でのエミュレーションでは、Yeti21さんと全く同じように最後まで行きます。
そして文字化けはあるのですが、yahooのトップページも表示されました。

この状態で評価して貰えると助かります。
宜しくお願いします。

お礼日時:2006/10/19 20:51

1.稼動するかどうかは詳細に見ていないので答えられません。


少なくともperlのパスは稼動するサーバに合わせて修正する必要がありますが、
あくまで、httpの参照ロジック部分のサンプルとして紹介しただけで、そのまま
使うという前提では有りません。
ただ、cgiとして稼動させるということを前提としています。
名前は別にhttp.plに拘る必要はありませんので、xxx.cgiでも自由に作成して
いただければ良いと思います。
逆に、~.plという名前でcgiとして稼動可能かは質問者様のhttpサーバの設定次第なので
私にはわかりません。

2.その通りです。サーバ側の情報です。

では、頑張ってください。

この回答への補足

今回試しているcgiです。

#!/usr/local/bin/perl
# @(#)http.pl Copyright (C)2001 ASH. http://ash.jp/
#
# 簡易ブラウジングスクリプト(HTTP)
# Usage: http.pl URL(http://host:port/dir/file
#

$|=1;
print "Content-type: text/html\n\n";

print <<"nghh";
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>test</TITLE>
</HEAD>
<BODY>
<h1><font color="green">test</font></h1>
<br><br>
<HR>
nghh

print "<br>\n";
print "step1\n";
print "<br>\n";

use strict;
use Socket;
use FileHandle;

my ($proxy_host, $proxy_port, $http);
my ($con_host, $con_port);
my ($host, $port, $url, $path, $ip, $sockaddr);
my ($arg, $buf);

($arg) = @ARGV;

# HTTPプロトコルのバージョン
$http = '1.1';

# プロキシサーバの設定
#$proxy_host = 'XXX.XXX.XXX.XXX';
#$proxy_port = 8080;

# デフォルトホストの設定
#$host = 'localhost';
$host = 'www.yahoo.co.jp';
$port = getservbyname('http', 'tcp');
$path = '/';

# URL解析処理
$arg =~ m!(http:)?(//)?([^:/]*)?(:([0-9]+)?)?(/.*)?!;
if ($3) {$host = $3;}
if ($5) {$port = $5;}
if ($6) {$path = $6;}
print "host=$host, port=$port, url=$url\n";


print "<br>\n";
print "step2\n";
print "<br>\n";

if ($proxy_host) {
# プロキシサーバ経由
$con_host = $proxy_host;
$con_port = $proxy_port;
$url = $arg;

} else {
$con_host = $host;
$con_port = $port;
$url = $path;
}


print "<br>\n";
print "step3\n";
print "<br>\n";

# ソケットの生成
$ip = inet_aton($con_host) || die "host($con_host) not found.\n";
$sockaddr = pack_sockaddr_in($con_port, $ip);
socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die "socket error.\n";


print "<br>\n";
print "step4\n";
print "<br>\n";


# ソケットの接続
connect(SOCKET, $sockaddr) || die "connect $con_host $con_port error.\n";
autoflush SOCKET (1);


print "<br>\n";
print "step5\n";
print "<br>\n";

# HTTP要求を送信
if ($http eq '1.1') {
print SOCKET "GET $url HTTP/1.1\n";
print SOCKET "Host: $host\n";
print SOCKET "Connection: close\n\n";

} else {
print SOCKET "GET $url HTTP/1.0\n\n";
}


print "<br>\n";
print "step6\n";
print "<br>\n";

# HTTP応答を受信
while (chomp($buf=<SOCKET>)) {
print "$buf\n";
}


print "<br>\n";
print "step7\n";
print "<br>\n";


# 終了処理
close(SOCKET);


print "<br>\n";
print "step8\n";
print "<br>\n";


print "<br>\n";
print "test end\n";
print "<br>\n";

補足日時:2006/10/19 13:58
    • good
    • 0
この回答へのお礼

また、早速返事を有り難うございます。
分からないなりにサンプルをコピーし、手を加えて、とりあえずフリーウェアの AN HTTPDでエミュレーションしてみました。
何とか結果が帰ってきました。
(実行したcgiは補足に上げさせていただきます)

やりたいことはまだ(データをサーバーに保存したい)なのですが、
個人的なサーバーの確認がしたいので、同cgiをアップし実行してみました。
1.結果は、403cgiエラー と 500インターナルサーバーエラーが出ました。
  ということは、私が使っているサーバーでは、soketを許して居ないということでしょうか。
2.もしくは本当にどこかにエラーがあるのでしょうか。
3.もし使えるのなら次のステップ(データの取込)に移りたいのですが。

手探りでやっているような状況です。
宜しくお願いします。

お礼日時:2006/10/19 13:58

参考URLの解説を参考に、そのホームページを読み込んでやれば、


あとは中身を取り出すだけです。
レイアウトを分解して必要な値を取り出すロジックは自分で考えてください。
それほど難しくは無いと思います。

参考URL:http://ash.jp/perl/socket_http.htm
    • good
    • 0
この回答へのお礼

早速有り難うございました。
まず、出来るということで一安心です。
ただ、参考サイトを読んでみましたが、ちんぷんかんぷんです。
これからしっかり勉強します。
また引き続き宜しくお願いします。

早速ですが、現状で何点かお願いします。
1.例題にあるhttp.plとは私のサーバーのcgi-binフォルダに
  http.plという名前で置いて、その名でアドレス欄に打ってやれば
  稼働するのでしょうか。
  (cgiと同じ扱いで宜しいのでしょうか)

2.『Webサーバに直接接続する場合は、ホスト名、ポート番号、URLディレクトリ』
 と在りますが、これは相手(会社サーバー)のことですよね。

全く素人で申し訳在りません。
とにかくやってみます、有り難うございました。

お礼日時:2006/10/19 06:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!