我有一个Yii2应用程序。我想将它连接到另一个安静的网页。因此用户将数据发送到我的应用程序,我将通过POST请求发送它们并根据JSON响应执行某些操作。如何在yii2中发送请求/获取响应部分?
答案 0 :(得分:1)
最好的方法是使用curl对RESTful API进行端到端调用,在这种情况下,您可能有兴趣查看a yii2 extension for curl.
如果没有Yii2扩展,我们可以通过在控制器中创建更通用的功能,或者更优选地在模型中(用于共享访问)来实现此目的,如下所示:
/**
* $method e.g POST, GET, PUT
* $data = [
'param' => 'value',
]
*/
public function curlToRestApi($method, $url, $data = null)
{
$curl = curl_init();
// switch $method
switch ($method) {
case 'POST':
curl_setopt($curl, CURLOPT_POST, 1);
if($data !== null) {
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
break;
// logic for other methods of interest
// .
// .
// .
default:
if ($data !== null){
$url = sprintf("%s?%s", $url, http_build_query($data));
}
}
// Authentication [Optional]
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
然后我们根据需要调用此函数,即取决于method
和url
和/或data
。
如果启用fopen包装器以访问Web服务URL,也可以方便地使用file_get_contents
。
$response = file_get_contents('http://example.com/path/to/api?param1=stack¶m2=overflow');
如果提供了JSON响应,您可以按如下方式恢复php数组:
$response = json_decode($response, TRUE);
如果返回XML响应,则
$response = new \SimpleXMLElement($response);
但是,如果API端点返回HTTP错误状态,则file_get_contents函数将失败并显示警告并返回null。