Perlコーディング

インターネット上のファイル取得

2007年12月17日
Perlでは、外部ドメインのページを取得する関数がないので、処理を書かなければいけないようです。PHPでは内部も外部もfopenで取得できるのですが、Perlはそうはいかないようです。

URLからホスト名とファイルを分け、ソケットをオープンして接続して内容を取得しなければいけません。取得に成功したら、htmlの特殊文字をエスケープします。



呼び出し元
&gePage("取得したいURL")

サブ関数
sub getPage{
 use Socket;

 $url = shift @_;
 my $host;
 my $file_path;

 $host = $url;

 $host =~ s/http:\/\///g;
 $host =~ s/https:\/\///g;
 @domain = split(/\//, $host);

 $file_path = $host;
 $file_path =~ s/@domain[0]//g;

 $host0 = @domain[0];
 $port0 = getservbyname("http", "tcp");

 $ipaddr = inet_aton($host0) or return "ホスト名検出エラー($host0)<br>\n";
 $sock_addr = pack_sockaddr_in($port0, $ipaddr);
 socket(SOCK, PF_INET, SOCK_STREAM, 0) or return "ソケット作成エラー($ipaddr / $port0)<br>\n";
 connect(SOCK, $sock_addr) or return "サーバー接続エラー($ipaddr / $port0)<br>\n";

 select(SOCK);
 $|=1;
 select(STDOUT);

print SOCK << "END_OF_DOC";
GET $file_path HTTP/1.0
Host:$host0
Connection:close

END_OF_DOC


 while(<SOCK>){
  last if m/^\r\n$/;
 }
 while(<SOCK>){
  while(s/</</is){ };
  while(s/>/>/is){ };
  while(s/\r\n|\r|\n/<br>/is){ };
  $page .= $_;
 }
 close SOCK;

 # エスケープ
 $page =~ s/&/&/g;
 $page =~ s/"/"/g;
 $page =~ s/</</g;
 $page =~ s/>/>/g;
 $page =~ s/<br>/\r\n/g;
 $page =~ s/<br>/\r/g;
 $page =~ s/<br>/\n/g;

 return $page;
}
2007年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
先月
来月
カテゴリ
検索
関連サイト
プロフィール
【ネットネーム】
みゅー

キャラクター by ツカエルサイト


【趣味】
・プログラミング
・写真
・楽器演奏
・手芸
・日曜大工
・家の中の不便を便利に
・考える
・自然科学
・猫と戯れる
・ジグソーパズル

【仕事】
・派遣社員でSE・PGやっていました。次の良い仕事がみつからないので、ビジネスへ注力しようと思っています。
・経験言語:VB6、VB.NET、PHP、Perl、JAVA、Oracle、SQLServer、PostgreSQL



【名前】
アン(足)

2014年4月22日生まれ 女の子
あだ名は くノ一
普段は普通にしゃべりますが、興奮すると『ニャ』を連発します

【趣味】
・狩
・ご飯を食べる
・ママのお手伝い

【仕事】
ママのビジネスの看板招き猫
ママの代わりにPC入力
仕事中のママの右腕を温める
ママに心配をかける
いろんな事をしでかしてママを退屈させない

RSSフィード
コメント
パトカーってハチワレ
2018-10-15 16:15:11
パトカーってハチワレ
2018-10-15 16:12:42
Tweet