2017-11-23 8 views
0

私はPHP Laravel5プロジェクトを持っています。私は次のようにコントローラのアクションでfile_get_contents()を使用します。リモートクライアントとSSLからのfile_get_contents

$production = json_decode(file_get_contents(url('/operation/get-production/'.$job->id)))->production; 

上記のルートは、認証と認可とlocalhostのからうまく機能上記のコード行から除外されます。しかし、インターネットからのリモートユーザーがそのコードを使用する場合、それは次のエラーを生成します。

enter image description here

私はIISを使用していないよ、サーバはUbuntuのLinux上のApacheです。私はSSLがこの場合に現れる理由を知らないのですか?私は、機能に供給されたURLであることをかなり確信しているhttp://...ないhttps://...

+1

停止さ_「かなり確信して」_ 、そして実際に_確認してください。また、リモートサーバーがHTTPリクエストをHTTPSにリダイレクトしているかどうかを確認します。 – CBroe

+0

@CBroeエラーのスクリーンショットを更新しました。もう一度チェックアウトしてください。 – SaidbakR

答えて

0

それそれがでそれを確認するためのルート証明書の参照ファイルを持っていないため、証明書の検証が失敗しているように聞こえます。 this Stack Overflow answerを参照してください。

+0

私は、証明書の検証と 'https'のないサーバーへのアクセスの関係は何ですか? – SaidbakR

+0

特定のプロトコルを指定しているようには見えません。関数 'url'はデフォルトでhttpsになるか、リモートurlがhttpsにリダイレクトされます。さらに情報がなければ、教える方法はありません。いずれにせよ、httpsはどこかに関わっている - 私はそれについて肯定的だ。 – starbeamrainbowlabs

1

プロダクションURLがhttpsを使用することがあります(それは良いことです)。

file_get_contents()はhttpsでデータを取得するのに最適な選択肢ではありませんが、php_openssl拡張機能が有効でallow_url_fopenを "on"に設定するとhttpsからコンテンツを取得できます。

あなたは、有効なSSL証明書を持っていないようだとして:あなたが信頼できる場合

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

(:PHPカールを使用することができますように、これと無効なSSLエラー、良いアイデア(http://php.net/manual/fr/book.curl.php)でなければなりませんURL:あなたがこれを行うことが、決して外部のウェブサイトでこれを行う)

+0

私は質問のスクリーンショットを更新しました。チェックアウトしてください。 – SaidbakR

+0

手動でURL(http)にアクセスすると、httpsにリダイレクトされますか?スタックトレースに307応答コード(一時的なリダイレクトを意味する)があることがわかります。 これは正常です.HTTPを要求すると、サーバーはhttpsにリダイレクトされ、SSL証明書が有効でない(おそらく自己署名入りの証明書)ため失敗しました。 すべての場合:file_get_contentの代わりにcurlを使用し、SSLエラーを回避するためにフラグを設定します。 – Bacteries

+0

httpからの通常の直接アクセスはリダイレクトされません。 – SaidbakR

0

あなたは2つの可能な状況があります:あなたは、Apacheを使用している場合は、あなたのconfをチェックして、あなたのドメインがないかどうかを確認し、

可能性のある回答#1すべての呼び出しでSSLを使用するように強制する

  • OR -

可能性のある回答#2、あなたのGETのURLのためのフローを作成し、他のサーバーにヘッダを送信する必要があります。

<?php //Create a flow 
$opt = array(
'http'=>array(
'method'=>'GET', 
'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3', 
'header'=>'Accept-language: en\r\n' . 
       'Cookie: foo=bar\r\n’)); 
$context = stream_context_create($opt); 
//Get external url response 
$file = file_get_contents('http://www.example.com/some_file', false, $context); ?> 
関連する問題