2013-08-01 2 views
0

У меня есть 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

+0

В 'HttpRequest' вы можете использовать' метод enableCookies' принять и отправить печенье, однако это будет работать если вы не хотите, чтобы сохранить печенье и использовать их в другом вызове сценария. – user1950929

ответ

0

Насколько вас вопрос касается «Как отправить печенье вместе с HttpRequest» Я думаю, что я мог бы быть в состоянии помочь, потому что я просто решен подобная проблема.

Прежде всего, всякий раз, когда вы хотите знать, что происходит на сетевом уровне. Какой тип запросов подходит и какой тип отправляется, просмотрите вкладку «Сеть» в консоли Chorme. В качестве альтернативы вы можете загрузить и установить FireBug, который поможет вам отслеживать входящие и исходящие запросы (эти советы действительно помогут вам в следующем проекте).

А что касается настройки файлов cookie через HTTP-заголовок, просто используйте следующий PHP-код.

header('Set-Cookie: CookieName='.$content); 

Здесь Cookie Name это имя любого сеанса печенья JSESSIONID и т.д. то есть и содержание соответствующий ключ, который должен быть кричал каждый раз, когда необходимо, чтобы пройти аутентификацию клиента.

Я надеюсь, что эта информация поможет вам и другим разработчикам :)

+0

Я думаю, что он искал отправку файлов cookie в запросе, тем самым эмулируя поведение браузера и не устанавливая файлы cookie в ответе. – user1950929

+0

Я вот что я пытался объяснить. Отправка файлов cookie вместе с запросом, сделанным с помощью JavaScript. И это главная причина, по которой вы можете увидеть заголовок этих запросов в FireBug. Это отличный плагин, который поставляется с Chrome и Firefox. –