Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CURLOPT_HTTPHEADER上分配php变量_Php_Curl_Openam - Fatal编程技术网

在CURLOPT_HTTPHEADER上分配php变量

在CURLOPT_HTTPHEADER上分配php变量,php,curl,openam,Php,Curl,Openam,我正在尝试测试OpenAM REST API的身份验证和注销功能。然而,我遇到了一个问题 身份验证API方法工作正常。但是,我似乎无法处理注销API方法。我认为这与在CURLOPT_HTTPHEADER中插入令牌ID密钥有关。我把一个字符串放在一个php变量中,并试图把它放在CURLOPT_HTTPHEADER中 对于身份验证方法来说,它工作得很好。但是,不适用于注销: ===============================================================

我正在尝试测试OpenAM REST API的身份验证和注销功能。然而,我遇到了一个问题

身份验证API方法工作正常。但是,我似乎无法处理注销API方法。我认为这与在CURLOPT_HTTPHEADER中插入令牌ID密钥有关。我把一个字符串放在一个php变量中,并试图把它放在CURLOPT_HTTPHEADER中

对于身份验证方法来说,它工作得很好。但是,不适用于注销:

==================================================================================================

$cg = curl_init("http://openam.example.com:8080/openam/json/authenticate");

curl_setopt($cg, CURLOPT_CUSTOMREQUEST, "POST");
// curl_setopt($cg, CURLOPT_HTTPHEADER, array('X-OpenAM-Username: amuser', 'X-OpenAM-Password: ampwd', 'Content-Type: application/json'));
$ampwd = "ampwd";

curl_setopt($cg, CURLOPT_HTTPHEADER, array('X-OpenAM-Username: amuser', 'X-OpenAM-Password: ' . "ampwd", 'Content-Type: application/json'));
curl_setopt($cg, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cg, CURLOPT_HEADER, true);

$output = curl_exec($cg);
if(!curl_errno($cg))
{
    $info = curl_getinfo($cg);

    echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}
else
    echo "fail";

// curl_close($cg);
echo "<pre>";
print_r($output);
echo "</pre>";

$tokenId = preg_match_all('/\{(.*?)\}/', $output, $match);
echo "<pre>";
print_r($match);
echo "</pre>";

$tokenId = preg_match_all('/\"(.*?)\"/', $match[1][0], $anothermatch);
echo "<pre>";
    $tokenIdTitle = $anothermatch[1][0];
    $tokenIdValue = '"' . $anothermatch[1][1] . '"';
    $successUrlTitle = $anothermatch[1][2];
    $successUrlValue = $anothermatch[1][3];
echo "</pre>";

$ch = curl_init("http://openam.example.com:8080/openam/json/sessions/?_action=logout");

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", 'iplanetDirectoryPro: ' . $tokenIdValue));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_exec($ch);

$output = curl_exec($ch);
if(!curl_errno($ch))
{
    $info = curl_getinfo($ch);

    echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}
else
    echo "fail";

echo "<pre>";
print_r($output);
echo "</pre>";

curl_close($ch);
?>

在调用注销curl之前,是否也可以打印变量
$tokenIdValue
?我猜它没有正确分配。注销调用实际上不需要“json”内容类型。。。文档
$curl--request POST--header“iplanetDirectoryPro:AQIC5wM2…U3MTE4NA..*”中的示例https://openam.example.com:8443/openam/json/sessions/?_action=logout“{”结果“:“已成功注销”}
如果更改了OpenAM cookie跟踪名称,则不能使用默认的“iPlanetDirectoryPro”头。如果未更改默认值,则可以进行网络跟踪以验证是否传输了标头,并检查OpenAM日志以验证是否可以在服务器端找到关联的SSO sesion。还请注意,您正在使用所谓的“零页登录”(用于身份验证)。。。确保您知道这意味着如果您更改OpenAM身份验证配置。我已经解决了这个问题。您必须在curl方法中用引号括起$tokenIdValue:例如curl_setopt($curl,CURLOPT_HTTPHEADER,array('iplanetDirectoryPro:'。“$tokenIdVal”,'Content type:application/json');
Took 0.032 seconds to send a request to http://openam.example.com:8080/openam/json/authenticate
HTTP/1.1 200 OK
Set-Cookie: amlbcookie=01; Domain=.ufcfit.com; Path=/
Date: Thu, 30 Oct 2014 01:59:24 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.1.7
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked

{"tokenId":"AQIC5wM2LY4Sfcyv1r3DrnDThcw3mMH7GbcKKb0E8UIfGEo.*AAJTSQACMDEAAlNLABQtNTAxMDIyNTMxNjAzNDE0ODkwMg..*","successUrl":"/openam/console"}
Array
(
    [0] => Array
        (
            [0] => {"tokenId":"AQIC5wM2LY4Sfcyv1r3DrnDThcw3mMH7GbcKKb0E8UIfGEo.*AAJTSQACMDEAAlNLABQtNTAxMDIyNTMxNjAzNDE0ODkwMg..*","successUrl":"/openam/console"}
        )

    [1] => Array
        (
            [0] => "tokenId":"AQIC5wM2LY4Sfcyv1r3DrnDThcw3mMH7GbcKKb0E8UIfGEo.*AAJTSQACMDEAAlNLABQtNTAxMDIyNTMxNjAzNDE0ODkwMg..*","successUrl":"/openam/console"
        )

)
Took 0.015 seconds to send a request to http://openam.example.com:8080/openam/json/sessions/?_action=logout
HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=ISO-8859-1
Content-Length: 69
Date: Thu, 30 Oct 2014 01:59:24 GMT

{ "code": 401, "reason": "Unauthorized", "message": "Access Denied" }