0

我有一个 PBX 服务器(Asterisk 1.8),我可以通过请求中的一些 GET 变量来管理呼叫。我的问题是我需要先登录到服务器。完成后,我想保存一个 cookie,然后将其与我的下一个请求一起发送以进行验证。

我有当前使用 cURL 工作的代码:

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 等待来自服务器的响应,这仅在调用结束时发生。因此,我无法同时拨打多个电话。

我如何在 PHP 中使用 HttpRequest 以与 cURL 相同的方式发送 cookie 以及请求?我对这背后的网络机制有点不熟悉,所以请原谅我对此一无所知。

TL;DR:如何与 HttpRequest 一起发送 cookie

4

1 回答 1

0

至于您对“如何与 HttpRequest 一起发送 cookie”的问题,我想我可能会提供帮助,因为我刚刚解决了一个类似的问题。

首先,无论何时您想知道网络级别发生了什么,即即将到来的请求类型和发送的类型,请务必在 Chorme 控制台中查找网络选项卡。或者,您可以下载并安装FireBug,它可以帮助您监控传入和传出的请求(这些提示将在您的下一个项目中真正帮助您)。

至于通过 HTTP Header 设置 cookie,只需使用以下 php 代码。

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

这里 Cookie 名称是任何会话 cookie 的名称,即 JSESSIONID 等,内容是每次客户端需要进行身份验证时必须喊出的相关密钥。

我希望这些信息对您和其他开发人员有所帮助:)

于 2013-10-20T07:51:32.767 回答