我一直在尝试使用此代码获取json和一些标头元素: 我能够打印出我需要的细节,但似乎我实际上无法“得到”它们。
$url = 'http://192.168.254.211:8080/sampleOnCurl/auth/login';
$initCurl = curl_init($url);
curl_setopt_array($initCurl,
array(
CURLOPT_URL => $url,
CURLOPT_POST => true,
// CURLOPT_NOBODY => true,
CURLOPT_RETURNTRANSFER => true,
// CURLOPT_FOLLOWLOCATION => true,
CURLOPT_POSTFIELDS => $loginData,
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'jrr: 7ffed684cbe1fc085b7b47dc4e508e99a5effee9',
'slave: 01bdfcc20777907712e97f7bd2faeb978584f317',
'spoil: ' .$timeStamp
)
)
);
$result = curl_exec($initCurl);
print_r($result);
//prints jrr, slave, spoil
$result = json_decode($result);
// $header = curl_getinfo($initCurl);
curl_close($initCurl);
这就是我得到的
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
jrr: 2e278657295bdfae2bc49b0bc6ad38363e9b149b
slave: d77985811796708b89471b4d29a904b224d41dde
spoil: 20130916222842701
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 16 Sep 2013 14:28:42 GMT
{"true":null}
我想获取{"true":null}
并将其转换为数组以检查索引是否为true
并获取jrr
,slave
和spoil
值..而不使用get方法..
打印的字符串似乎也不在json中。我的猜测是问题在于我的卷曲选项。我可以错过什么?
这是我需要做的事情:
得到json {"true":null}
获得响应标题:jrr,slave,spoil
避免使用Get方法
感谢
答案 0 :(得分:1)
这样的事情怎么样:
list($headers, $body) = explode("\r\n\r\n", $result, 2);
function parseSimpleHeaders($headers) {
$lines = explode("\r\n", $headers);
$parsed = array();
foreach($lines as $line) {
$colon = strpos($line, ':');
if($colon !== false) {
$name = trim(substr($line, 0, $colon));
$value = trim(substr($line, $colon + 1));
$parsed[$name] = $value;
}
}
return $parsed;
}
$headers = parseSimpleHeaders($headers);
$json = json_decode($body);
echo $headers['jrr'], "\n"; // 2e278657295bdfae2bc49b0bc6ad38363e9b149b
echo $headers['slave'], "\n"; // d77985811796708b89471b4d29a904b224d41dde
echo $headers['spoil'], "\n"; // 20130916222842701
var_dump($json); // object(stdClass)#1 (1) { ["true"] => NULL }
N.B。 pecl_http
中有一个http_parse_headers()
函数,但我已经包含了我自己的简化版本parseSimpleHeaders()
,以防它未安装。
答案 1 :(得分:0)
您在变量$result
中收到回复内容和标题,因此无法直接解析它。
要使其工作,请使用两个新行爆炸$result
。
$result = explode("\n\n", $result);
现在您可以按$result[0]
访问标题字符串,并按$result[1]
访问回复内容(并使用json_decode($result[1], true)
进行解析。