2017-10-22 171 views
0

我目前正在使用Slim框架構建一個站點。我在我的網站上有一個端點設置,它正在工作,但是當試圖使用PHP file_get_contents()json_decode()得到它時,沒有返回。當我運行相同的代碼,但將url更改爲遠程公共API時,json將被解碼並輸出到頁面。PHP無法從本地頁面獲取json,只有遠程url

工作守則

$url = "https://jsonplaceholder.typicode.com/users"; 
$contents = file_get_contents($url); 
$results = json_decode($contents); // Returns JSON array 

不與當地現場工作

$url = "https://local/api/endpoint"; 
$contents = file_get_contents($url); 
$results = json_decode($contents); // Returns NULL 

上什麼可能會導致此任何想法?可能是頭文件?

+0

當你把 - https://開頭的本地/ API /端點到您的瀏覽器 - 你怎麼看? – TimBrownlaw

+0

'local/api/endpoint'給了我一個404,但是如果我通過HTTPS路由它,它給了我預期的json。 https可以做些什麼,因爲PHP只是發送http而不是? –

+0

HTTPS從我的問題中的url文本中刪除。在回答你的問題時,是的,那是需要檢查的東西? – TimBrownlaw

回答

1

您的本地端點失敗,因爲在您使用自簽名證書的情況下,php無法驗證SSL證書。在當地的發展,你可以繞過SSL CA通過修改默認的流上下文檢查:

$stream_opts = [ 
    "ssl" => [ 
     "verify_peer"=>false, 
     "verify_peer_name"=>false, 
    ] 
]; 
$response = file_get_contents("https://local/api/endpoint", 
      false, stream_context_create($stream_opts));