Php 禁止使用CodeIgniter Guzzle HTTP 403
所以我创建了2个CodeIgniter应用程序;一个应用程序是API,另一个是客户端应用程序。我已经在cPanel中部署了这两个应用程序(在部署之前,我已经测试了这两个应用程序,它们都可以正常工作)。我已经使用Postman测试了API,它运行得很好,但是当我尝试使用我的客户端应用程序(使用GuzzleHTTPV6.5.5)访问API时,我一直收到403禁止的错误 控制器:Php 禁止使用CodeIgniter Guzzle HTTP 403,php,codeigniter,cpanel,guzzle,Php,Codeigniter,Cpanel,Guzzle,所以我创建了2个CodeIgniter应用程序;一个应用程序是API,另一个是客户端应用程序。我已经在cPanel中部署了这两个应用程序(在部署之前,我已经测试了这两个应用程序,它们都可以正常工作)。我已经使用Postman测试了API,它运行得很好,但是当我尝试使用我的客户端应用程序(使用GuzzleHTTPV6.5.5)访问API时,我一直收到403禁止的错误 控制器: public function login() { if (isset($this->se
public function login()
{
if (isset($this->session->token)) {
$this->session->set_flashdata('danger', 'You are logged in.');
redirect(base_url('main/page_login'));
}
$input = $this->input->post(null, TRUE);
$response = $this->main_model->login($input);
if ($response['status'] != 200) {
$this->session->set_flashdata('danger', $response['message']);
redirect(base_url('main/page_login'));
}
$response['user']['full_name'] = $response['user']['first_name'] . ' ' . $response['user']['last_name'];
$this->session->set_userdata('user', $response['user']);
$this->session->set_userdata('roles', $response['id_roles']);
$this->session->set_userdata('token', $response['token']);
$this->session->set_userdata('is_admin', FALSE);
foreach ($this->session->roles as $roles) {
if (in_array($roles['id_role'], array(1, 2))) {
$this->session->is_admin = TRUE;
}
}
$this->session->set_flashdata('login', 'Logged in');
if ($this->session->flashdata('referrer') != '') {
redirect(base_url($this->session->flashdata('referrer')));
} else {
redirect(base_url('main'));
}
}
型号:
<?php
//Guzzle configuration
use GuzzleHttp\Client;
class Main_model extends CI_Model{
private $_client;
private $_base_uri;
public function __construct()
{
$this->_client = new Client();
$this->_client_service = 'frontend-client';
$this->_auth_key = 'rest-api';
$this->_base_uri = 'https://myapp.com/api';
}
function login($params)
{
$response = $this->_client->request('POST', $this->_base_uri . '/auth/login', [
'headers' => [
'Client-Service' => $this->_client_service,
'Auth-Key' => $this->_auth_key
],
'body' => json_encode($params)
]);
return json_decode($response->getBody()->getContents(), true);
}
?>
我已经尝试在头中使用用户代理、接受和接受编码,但仍然得到403禁止的错误。我在代码中做错了什么?提前谢谢
更新:
回应@Ivan Ivanov的评论;在我将“body”改为“json”后,当我运行它而不是403时,系统现在给我500个内部服务器错误。但话说回来,如果我试着通过邮递员登录,效果会很好
An uncaught Exception was encountered
Type: GuzzleHttp\Exception\ServerException
Message: Server error: `POST https://myapp.com/api/auth/login` resulted in a `500 Internal Server Error` response:
An uncaught Exception was encountered< (truncated...)
Filename: /home/u61800/public_html/client/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
Line Number: 113
Backtrace:
File: /home/u61800/public_html/client/vendor/guzzlehttp/guzzle/src/Middleware.php
Line: 65
Function: create
File: /home/u61800/public_html/client/vendor/guzzlehttp/promises/src/Promise.php
Line: 203
Function: GuzzleHttp\{closure}
File: /home/u61800/public_html/client/vendor/guzzlehttp/promises/src/Promise.php
Line: 156
Function: callHandler
File: /home/u61800/public_html/client/vendor/guzzlehttp/promises/src/TaskQueue.php
Line: 47
Function: GuzzleHttp\Promise\{closure}
File: /home/u61800/public_html/client/vendor/guzzlehttp/promises/src/Promise.php
Line: 246
Function: run
File: /home/u61800/public_html/client/vendor/guzzlehttp/promises/src/Promise.php
Line: 223
Function: invokeWaitFn
File: /home/u61800/public_html/client/vendor/guzzlehttp/promises/src/Promise.php
Line: 267
Function: waitIfPending
File: /home/u61800/public_html/client/vendor/guzzlehttp/promises/src/Promise.php
Line: 225
Function: invokeWaitList
File: /home/u61800/public_html/client/vendor/guzzlehttp/promises/src/Promise.php
Line: 62
Function: waitIfPending
File: /home/u61800/public_html/client/vendor/guzzlehttp/guzzle/src/Client.php
Line: 182
Function: wait
File: /home/u61800/public_html/client/application/models/Main_model.php
Line: 31
Function: request
File: /home/u61800/public_html/client/application/controllers/Main.php
Line: 92
Function: login
File: /home/u61800/public_html/client/index.php
Line: 315
Function: require_once
您应该更改此行:
'body' => json_encode($params)
为此:
'json' => json_encode($params)
因为Guzzle
需要POST数组中的'json'键
还有var\u dump($this->\u client)
看看你是否有客户。我已经更新了关于你评论的帖子,先生。
'body' => json_encode($params)
'json' => json_encode($params)