tw fc2 to 2nt
..

ハダカのブログ                IP: 3.142.98.108

Tumblrの画像存在チェック

Tumblrの画像存在チェック がいつの間にか、すべて存在しないとなっていた。PHPによるファイル存在チェック は file_get_contents 関数に任せていたのですが、 CURL が良いとの記事を見つけたので変更することにした。そもそも、なぜ、急にできなくなったかは、コマンドラインで CURL を叩いて何となく理解した。

Tumblr エロ画像
https://78.media.tumblr.com/137536149c3376af5665914ec889bf4f/tumblr_pa3bplTY1l1rfkswfo1_250.jpg


# curl -v https://78.media.tumblr.com/137536149c3376af5665914ec889bf4f/tumblr_pa3bplTY1l1rfkswfo1_250.jpg
* About to connect() to 78.media.tumblr.com port 443 (#0)
* Trying 119.161.4.42...
* Connected to 78.media.tumblr.com (119.161.4.42) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using AES128-SHA
* Server certificate:
* subject: C=US; ST=California; L=Sunnyvale; O=Yahoo Holdings, Inc.; CN=*.yahoo.com
* start date: 2018-06-12 00:00:00 GMT
* expire date: 2018-07-23 12:00:00 GMT
* subjectAltName does not match 78.media.tumblr.com
* Closing connection 0
* SSLv3, TLS alert, Client hello (1):
curl: (51) SSL peer certificate or SSH remote key was not OK


最終的には、サーバー証明書の検証を行わないように CURL にオプションを追加て対応。


function getHTTPstatus($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST , 0);
$data = curl_exec($ch);
curl_close($ch);
$n = preg_match("/^(HTTP\/[0-9\.]+) ([0-9]+) (.+)/i", $data, $arr);
if (! isset($arr[2])) $arr[2] = FALSE;
if (! isset($arr[3])) $arr[3] = '';
$res = array($arr[2], $arr[3]);
return $res;
}

返り値を配列じゃなくてTRUE か FALSE に変更して終了かな。

pr
Copyright(c) 2007 ハダカのブログ