![](/img/trans.png)
[英]How to get Cookies content from HTTP Request Header in CURL php?
[英]Get PHP page content only from specific server with Zend\Http\Client and Curl
我怎样才能确保php页面的内容仅在特定服务器的curl请求下才能访问? 可能无法通过诸如“ https://cms.domain.com/home ”之类的请求在浏览器中获取内容,但是如果我在特定服务器上创建Zend Client,则应该可以获取内容。
是否可以检查引荐来源或其他内容?
$adapter = new Zend\Http\Client\Adapter\Curl();
$client = new Zend\Http\Client();
$client->setAdapter($adapter);
$client->setMethod(\Zend\Http\Request::METHOD_GET)
->setUri('https://cms.domain.com/home');
$response = $this->client->send();
如果您找到一个简短的方法,那么我会拒绝!
唯一且唯一可靠的解决方案是使用OAuth2协议来限制您的API https://cms.domain.com/home
。 因为Google,Facebook,Twitter使用OAuth2作为其API。
因此,您需要创建一个RESTful应用程序。 典型的RESTful Web服务将使用HTTP来执行四个CRUD(创建,检索,更新和删除)操作。 这意味着你可以操作这些四个运算的API等不同的端点https://cms.domain.com/v2/api/oauth
, https://cms.domain.com/v2/api/etc
例如。
当您使用Zend\\Http\\Client
作为客户端来处理您的api时,则不再需要用于身份验证的服务器,即OAuth2服务器。 在这里,您可以通过Brent Shaffer获得用于PHP的OAuth2服务器库 。
您还可以使用php League中的OAuth2服务器 。
另一个选项是Zend Framework的Apigility ,如果您需要启动并运行OAuth 2.0 API,这将非常有用。 请查看他们的文档以获取实现!
您可以在HTTP Request上检查User Agent 。 这里是cURL用户代理的示例: curl/7.37.0
。
因此,您可以在onBootstrap(MvcEvent $mvcEvent)
处检查用户代理不是curl/*
,请求将被拒绝。
class Module
{
public function onBootstrap(MvcEvent $event)
{
$headers = $event->getRequest()->getHeaders();
$userAgent = $headers->get('User-Agent');
if (is_null($userAgent) || preg_match("/^curl\/.*/", $userAgent->getFieldValue() !== 1) {
$response = $this->getResponse();
$response->setStatusCode(400); // give bad request status
$response->sendHeaders();
$stopCallBack = function($mvcEvent) use ($response){
$mvcEvent->stopPropagation();
return $response;
};
//Attach the "break" as a listener with a high priority
$event->getApplication()->getEventManager()->attach(MvcEvent::EVENT_ROUTE, $stopCallBack,-10000);
return $response;
}
}
}
如果需要,可以添加一些类似的安全令牌以使限制更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.