総務省データをページ内で閲覧するサービスを作った時、csvデータのアクセスがエラーで進まなかった。
どうやら、アクセス元のサーバー、今回でいうと総務省のサーパーにアクセス許可処理をしないといけないのだが、昨今のサーバーはデフォルトで禁止の設定になっている。
しかし、ブラウザでは、ダイレクトurlで問題なくダウンロードできるのだから、何のためのセキュリティなのかということ。
そもそも、サイトの規約で、ajaxアクセスを禁止するような文面もないということは、とりあえずはダウンロードに関しては、やること自体問題ないはず。
そしてphpでfile_get_contents関数でやってみると、またダメ。
でも、ヘッダーを付けたら、問題なく取得出来る。
対応方法
こうなれば、サーバーを1台用意し、それを中継するajax処理にすればいいじゃない。
という事で、下記のような構成に変更。
<?php
header("Access-Control-Allow-Origin: *");
$data = file_get_contents($_REQUEST["url"]);
// 総務省のcsvダウンロード専用エンコード処理
$enc = "SJIS";
$data = mb_convert_encoding($data , "UTF-8" , $enc);
echo $data;
exit();
注意点
それぞれのソースコードを書いておくが、注意点としては、これは、踏み台サーバーなので、改めてアクセス元のや、接続先、何かしらの証明を行うべきである。
中継サーバーで、セッション処理をして、webサーバー側のセッションと連携するとか、すると、心配なくなるだろう。
あと、getじゃなくてpostにする事で、簡易な踏み台扱いはできなくなるはず。
クローラーと組み合わせれば、かなり使える機能になるかもね。
0 件のコメント:
コメントを投稿