我一直在努力解析https响应,以获取未来https调用所需的令牌值。
要从JSON响应中解析令牌,我已经尝试了以下内容:
$doc = json_decode($response, true);
token = $doc["result"]["token"];
要从XML响应中解析令牌,我尝试了以下内容:
$json = json_encode($response);
$token = json_decode($json,TRUE)['raw_body'];
在python中解析令牌的JSON所有我必须做的是:
token = json.loads(data.text)["result"]["token"]
如果我将令牌的控制台输出复制粘贴到以后的https调用中 它工作得很好,所以我想也许我可以"欺骗"一点点,捕获控制台输出并使用它,所以我尝试了以下:
ob_start();
echo $token;
$test = ob_get_contents();
ob_end_clean();
echo $test;
然而,这也没有奏效。接下来我想到的是我解析'的结果。有一些奇怪的字符导致令牌在将来的https调用中失败。所以我尝试了以下内容:
$token = preg_replace("/[^\w]+/", " ", $data['raw_body']);
这给了我一个有趣的回答: " xml版本1 0编码UTF 8结果xmlns [url was here] portal token 7eae331326c9363c9cf47ef58c1d844422dabb0 token result"
所以我想我可以用它的空格分割字符串并拉出令牌。但是,这也不起作用。
在Python中,我的完整代码如下所示:
# Request Token
data = requests.post(ACCESS_TOKEN_URL, data={'apikey': APIKEY, "format": "json"},
auth=HTTPDigestAuth(USERNAME, PASSWORD))
# Parse JSON for Token
token = json.loads(data.text)["result"]["token"]
在PHP中,这就是我所拥有的:
$data = array(
'apikey' => $this->api_key,
'format' => 'xml');
Unirest\Request::auth($this->username, $this->password, CURLAUTH_DIGEST);
$response = Unirest\Request::post(self::build_url("auth", "get-token")
// lots of comments of attempts below
有什么想法吗?这是我使用PHP的第一周,我完全迷失了。
由于
答案 0 :(得分:0)
终于明白了。
我确实让它变得更加复杂。
$xml = simplexml_load_string($response->body);
$token = $xml->token;