私はCLIのPHPスクリプトを作成しています。いくつかのデータをフェッチして処理します。それはそうなど、時々遅いインターネットを持っているので、私は、DNSルックアップを示すために、スクリプトにいくつかの冗長性を追加接続したかっにPHPでIP(既知のホスト名を使用)経由でHTTPSサイトに接続しようとしましたが、「ピア証明書...期待どおりのCNと一致しません...」
を実行しているシステムでは、私は無地file_get_contents()
を使用してから切り替えてTCPを作成するために余分な努力をしてソケット、手動でHTTPデータなどを送信するので、これらの個別の操作にステータス更新を散在させることができます。
しかし、最初のDNSルックアップおよび接続には最大5秒かかることがあります。そのほとんどは、8.8.8.8からのランダムな低速のためです。だから、私はDNSルックアップと実際の接続コールの間に得ることができるかどうかを確認することにしました。
$ip = gethostbyname('google.com.');
$stream = stream_socket_client('tls://'.$ip.':443/');
まあ、残念ながら...
PHP Warning: stream_socket_client(): Peer certificate CN=`*.google.com' did not
match expected CN=`216.58.196.142' in ...
PHP Warning: stream_socket_client(): Failed to enable crypto in ...
PHP Warning: stream_socket_client(): unable to connect to tls://216.58.196.142:443/
(Unknown error) in ...
...これはPHPのTLSを引き起こしスタックがフリークアウトする。 これは完全に適切で正しく構成されており、ホスト名ではなくIPアドレスのみを表示するバグではなく、消化不良を起こす正当な理由があります。
(... PHPはない、その後に行くと、「不明なエラー」として「これはMITM攻撃することができ、」要約...手のひらを顔に当てるべきであるが;しかし、私は脱線)
私の根本的な問題カール、ソケット、ストリームのどちらも、「接続しようとしている」、「DNSルックアップを行っています」、「接続されました」などの通知などのイベントコールバックを提供していないことです。 :(
このリモートサイトはこのような操作を許可していますか? – nogad
@nogad:どういう意味ですか?これは標準のHTTPSサーバーです。テストでは、google.comを使用していますが、これは事実上同等です。 –