如何使用cURL获取json字符串和header元素

时间:2013-09-16 14:52:33

标签: php curl

我一直在尝试使用此代码获取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 并获取jrrslavespoil值..而不使用get方法..

打印的字符串似乎也不在json中。我的猜测是问题在于我的卷曲选项。我可以错过什么?

这是我需要做的事情: 得到json {"true":null} 获得响应标题:jrr,slave,spoil 避免使用Get方法

感谢

2 个答案:

答案 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)进行解析。