0
我有一個Yii2應用程序。我想將它連接到另一個寧靜的網頁。所以用戶將數據發送到我的應用程序,我會通過POST請求發送它們,並根據JSON響應做一些事情。我如何在yii2中發送請求/獲取響應部分?將Yii2連接到另一個RESTful應用程序
我有一個Yii2應用程序。我想將它連接到另一個寧靜的網頁。所以用戶將數據發送到我的應用程序,我會通過POST請求發送它們,並根據JSON響應做一些事情。我如何在yii2中發送請求/獲取響應部分?將Yii2連接到另一個RESTful應用程序
最好的方法是使用捲曲,使端到端應用於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
。
如果JSON響應服務,您可以收回PHP數組如下:
$response = json_decode($response, TRUE);
如果返回XML響應,然後
$response = new \SimpleXMLElement($response);
但是,如果API端點返回HTTP錯誤狀態,file_get_contents函數失敗,併發出警告並返回null。