あぁ、休日の一覧データが欲しい。
欲しい、
欲しい、
別のサーバ(内閣府)からcsvで取得してみる。
せっかくなのでcurlとSplFileObjectの2方法で試す。
$url = 'https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv';
# curl
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
# SplFileObject
$file = new NoRewindIterator(new SplFileObject($url));
curlは$dataに設定されない。(errnoは35)
SplFileObjectはエラーが発生。
PHP Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): SSL operation failed with code 1. OpenSSL Error messages:
error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small
curl_errno([35] => 'CURLE_SSL_CONNECT_ERROR')
調べて見つけたページ
ふーん。。。
接続先の鍵が短いのか?(たぶんopensslのバージョンが古いかなにか。)
なら短い鍵でも大丈夫なようにすれば良さそう。
オプションを調べる。
curl_setoptにCURLOPT_SSL_CIPHER_LISTを発見。
stream_context_createのsslオプションにciphersを発見。
sslオプションを設定してみる。
$url = 'https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv';
# curl
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
$data = curl_exec($ch);
curl_close($ch);
#SplFileObject
$ctx = stream_context_create([
'ssl' => array(
'ciphers' => 'TLSv1'
)
]);
$file = new NoRewindIterator(new SplFileObject($url, 'r', false, $ctx));
できた!
内閣府のsslキーって短いんだ。。。大丈夫なのか?
終わり