我正在开发REST API。因此,我准备了一个函数,它通过curl将身份验证数据发送到REST服务器。我已经实现了两个身份验证选项。第一种是基本身份验证,第二种是通过令牌(Bearer)进行身份验证。
现在,我处于故障状态,因为在REST服务器上,在通过令牌进行身份验证的情况下,REST服务器不会收到POST数据。身份验证本身正在运行,但POST数据将丢失。在通过Basis Authentication进行身份验证的情况下,REST服务器将接收POST数据,没问题。
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
async def listener(websocket, path):
async for message in websocket:
self.onMessage.emit(message)
self._server=websockets.serve(listener, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(self._server)
asyncio.get_event_loop().run_forever()
print("Finished...")
此外,$ curl_post_data在调试时显示客户端的所有数据,之后将使用curl_exec($ curl)执行其余调用。
可能是什么问题?
答案 0 :(得分:0)
经过好几个小时后,我发现了问题并解决了这个问题。
问题是:
onCreate()
使用'Content-Type:application / json'会导致丢失POST数据信息。
解决方法是:
更改
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization));
到
'Content-Type: application/json'
答案 1 :(得分:0)
您可以将yii2的HttpBasicAuth身份验证器行为用于承载令牌身份验证。
use yii\filters\auth\HttpBasicAuth;
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => HttpBasicAuth::className(),
];
return $behaviors;
}
对于您建议的解决方案,应使用json请求解析器。
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
]