プロが教える店舗&オフィスのセキュリティ対策術

あるサイトの会員になっており、
サイトにログインしてデータをダウンロードすることができます。

手動であればブラウザで可能なのですが、
定期的に自動取得したいと思っています。

それもクライアントを介さずに、サーバー上からの自動取得です。

クライアントからだと、VBやJavaScriptなどを使う方法でイメージできるのですが、
サーバーからだとなかなかイメージできずに困っております。

A 回答 (4件)

クライアントを介せずに、というよりはブラウザを介せずにって事じゃないですか?



リクエスト送信時にブラウザがやっている事を代わりにやってあげるしか無いと思います。

ブラウザのリクエスト例
POST /******/Login.php HTTP/1.0
Accept: */*
Referer: http://*********.com/******/Login.php
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30)
Host: 10.0.66.4
Content-Length: 38
Cache-Control: no-cache
Cookie: la_Session=uchf7m*4**vtr*r*l3ncc**c**

user_name=********&user_passwd=*******

これに対してのサーバの返答を見て処理を順々に行っていけば良いと思います。

ブラウザとサーバのやり取りを見るなら↓のようなツールがあります。
SSL対応です。

参考URL:http://www.jumperz.net/index.php?i=2&a=0&b=4

この回答への補足

回答ありがとうございます。

そうですね、ブラウザを介さずにってことです。

httpでのやり取りはブラウザに任せることが多いと思うので、
具体的なやり取りは良くわかってませんでした。

「リクエスト」をして「返答」を見るという一連の処理の
サンプルなどがあれば嬉しいのですが・・・。

ツールについてもありがとうございます。

補足日時:2008/10/02 10:57
    • good
    • 0

HTTPモジュールが入っていれば、http_get関数が使えます。

まずは以下の関数を試してみてください。
$data = http_get("http://www.example.com/...",array("httpauth" => "userid:pass"));
この関数は、いろいろ細かい設定が出来ますので、詳しくは「php http_get」で検索してみてください。

ちなみに、http_get関数ほど細かい指定は出来ませんが、通常のfopen()やfile()でもhttpからのデータ取得は可能です。
ファイル名の代わりにURLを書くだけです。
$fp = fopen("http://www.example.com/...","r");
といった感じに。ログインが必要だと厳しいかも知れませんが、
BASIC認証であれば以下のような書き方でいけると思います。
$fp = fopen("http://userid:pass@www.example.com/...","r");

これでだめなら、t_netbugさんの提案通り、通信のやり取りしないといけないですね。
    • good
    • 2

御利用の会員制サイトがどのような認証方法や通信を利用していているかや


PHPにどのようなモジュールが組み込まれているかに依りますが、
PHPのcURL関数を使うのが楽でしょう。
 POSTやGET
 httpやhttps
 クッキーでのセッション管理
まで対応していますので、ほとんどのサイトはなんとかなるでしょう
cURL関数については http://jp2.php.net/curl

phpにcurlが組み込まれていない場合で、OSがBSD系やLinuxの場合は、
PHPから /usr/local/bin/curl を直接たたいてやれば同じことができます。

ブラウザと同等の手順になるようにどのパラメータをどのページの時に
送信するかを見つけるのが面倒ですけどね。
POSTデータやクッキーデータ、referenceやUseragentまでも模擬しないと
正しくデータをくれないサイトも有ります。

デバッグに本物のサイトを頻繁に利用すると、不正アクセスと判断されて
アカウントを削除されるかもしれないので、サーバに負荷をかけないようにしてください。
    • good
    • 0

phpではたぶん出来ない気がします。


送信を行うとき、サーバに対して、こちらが何番のポートから送信したかの情報を一緒に送信します。
すると、サーバはリクエストに対しての結果を、送信してきたIPアドレスの送信元ポート番号に返します。

ということは、そのポート番号をずっと監視していなければいけないプロセスが必要になる、という事になります。
PHPであるポート番号を監視し続けるプログラムサンプルがあれば良いのですが、自分は見た事がありません。
恐らく、参考になるのはチャットプログラム(TCP形式)ではないでしょうか?
漠然としたアドバイスしか出来ず、申し訳ありません。
    • good
    • 0
この回答へのお礼

再びの回答、ありがとうございます。

phpで出来ないとなると厳しいですね・・・。

ちょっと調べてみます。

お礼日時:2008/10/02 13:19

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