2017-03-23 38 views
1

在我的新应用程序API中,我必须检查来自第三方URL的请求应该在https中。如果没有使用https,我不得不返回消息为“没有加密”谁能帮我如何获取来自laravel HTTP请求类的传入请求的协议(http/https)?

+1

一个简单的谷歌搜索可以帮助你 – JRR

+0

@SathishkumarR我thint倒不如重定向到automaticaly安全网址,没有显示消息,你不觉得? –

+1

@Autista_z它只是一个API。它将验证请求并在我的应用程序中注册用户。然后它将返回带有访问令牌的URL访问,访问令牌将在5分钟后过期。 –

回答

3

给你:?

Determining If The Request Is Over HTTPS 

if (Request::secure()) 
{ 
    // 
} 
+0

感谢您的回答。 –

+1

getScheme()方法返回请求的协议。 –

+0

这使用端口检测方法。在一些负载平衡器(heroku,aws)上,即使https,因为负载平衡器后面的一些请求位于端口80而不是443,这也会失败。我最终不得不使用https字符串检查。 – dster77

1

丹尼尔Tran的答案是正确的只是信息的HTTPS类型要求有一个额外的领域HTTPS上的请求。有时,本场可等于关闭太多,但仅此而已。

,所以你可以只写一个类似的代码

if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') { 
    doSomething(); 
} 

Laravel请求类还继承了一些与交响乐完全相似的东西。你可以在下面找到;

供应商/ symfony中/ HTTP-foundatiton/Request.php

public function isSecure() 
    { 
     if ($this->isFromTrustedProxy() && self::$trustedHeaders[self::HEADER_CLIENT_PROTO] && $proto = $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_PROTO])) { 
      return in_array(strtolower(current(explode(',', $proto))), array('https', 'on', 'ssl', '1')); 
     } 

     $https = $this->server->get('HTTPS'); 

     return !empty($https) && 'off' !== strtolower($https); 
    }