0

我一直在尝试使用此代码获取 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}并将其转换为数组以检查 index 是否为true getjrr和values ..slave而不spoil使用 get 方法..

打印的字符串似乎也不在 json 中。我的猜测是问题出在我的 curl 选项中。我会错过什么?

这是我需要做的:获取json{"true":null} 获取响应头:jrr,slave,避免使用Get方法

谢谢

4

2 回答 2

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 }

注意有一个http_parse_headers()功能,pecl_http但我已经包含了我自己的简化版本parseSimpleHeaders(),以防它没有安装。

于 2013-09-16T18:56:21.237 回答
0

您正在变量中获取响应内容和标头,$result因此您无法直接解析它。

为了让它工作,$result使用两条新线爆炸。

$result = explode("\n\n", $result);

现在您可以通过访问标头字符串$result[0]和通过响应内容$result[1](并使用json_decode($result[1], true).

于 2013-09-16T17:50:44.317 回答