У меня есть PBX-сервер (Asterisk 1.8), и я могу управлять вызовами через некоторые переменные GET в запросе. Моя проблема в том, что мне нужно сначала войти на сервер. Как только я это сделал, я хочу сохранить файл cookie, а затем отправить его для проверки вместе с моим следующим запросом.Отправить файлы cookie через HttpRequest в PHP вместе с запросом
У меня есть код, который в настоящее время работает с использованием Скручивания
public function authenticate(){
$temp_dir = sys_get_temp_dir();
$ckfile = tempnam($temp_dir, "ast");
$auth_url = $this->ast_link."?action=login&username=asterisk_http&secret=*****";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $auth_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$auth_response = curl_exec($ch);
curl_close($ch);
$this->auth_cookie = $ckfile;
return $ckfile;
}
//$call contains id, patcode, phone_number, call_type
public function makeCall($overload, $call, $exten, $user = NULL){
set_time_limit(0);
if(!$this->auth_cookie) $this->authenticate();
//http://blah.server/asterisk/rawman?action=originate&channel=$somechannel
$call_url = $this->generateCallUrl($overload, $call, $exten, $user);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $call_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->auth_cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
К сожалению Curl ждет ответа от сервера, который происходит только в конце разговора. Из-за этого я не могу выполнять несколько вызовов одновременно.
Как я могу использовать HttpRequest в PHP для отправки файла cookie вместе с запросом так же, как это делает cURL? Я немного расстроен с помощью сетевой механики, поэтому простите меня за мое невежество.
TL; DR: Как отправить печенье вместе с HttpRequest
В 'HttpRequest' вы можете использовать' метод enableCookies' принять и отправить печенье, однако это будет работать если вы не хотите, чтобы сохранить печенье и использовать их в другом вызове сценария. – user1950929