2014-11-10 2 views
1

Я работаю с API, используя cURL Я получил набор данных.Извлечь данные из части JSON и части HTTP-ответа

Данные представляют собой половину запроса HTTP и половину JSON. Я не уверен, почему это смешанное, но в основном я получаю этот ответ, когда я делаю var_dump:

string(873) "HTTP/1.1 200 OK cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0 content-length: 153 content-type: application/json;charset=utf-8 date: Mon, 10 Nov 2014 10:58:49 UTC expires: Tue, 31 Mar 1981 05:00:00 GMT last-modified: Mon, 10 Nov 2014 10:58:49 GMT ml: A pragma: no-cache server: tsa_b set-cookie: guest_id=v1%3A141561712923128379; Domain=.twitter.com; Path=/; Expires=Wed, 09-Nov-2016 10:58:49 UTC status: 200 OK strict-transport-security: max-age=631138519 x-connection-hash: 57175e4dba3d726bebb399072c225958 x-content-type-options: nosniff x-frame-options: SAMEORIGIN x-transaction: 2e4b8e053e615c75 x-ua-compatible: IE=edge,chrome=1 x-xss-protection: 1; mode=block {"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAMVfbQAAAAAAK7qYRQOgdZ771TrJ6pZ7nugCwVQ%3DLKcongtwy3lcBDbPSEreC9DfhJk3Gm7qyQInqhFAxYvo1clv4S"}" 

Это полные данные обратно. У него есть HTTP-информация в начале, а затем часть JSON в конце.

Единственный бит, который мне нужен, это данные access_token.

Если бы это был только JSON, то я мог бы использовать json_decode, чтобы получить access_token, но поскольку он получил всю информацию HTTP в начале json_decode, он не может ее понять и дает результат NULL.

Как удалить HTTP-часть, чтобы я мог просто получить данные access_token?

ETA: мой запрос был сделан через локон, поэтому вар я демпинг из является $response

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$auth_url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$header = curl_setopt($ch, CURLOPT_HEADER, 1); 
$result = curl_exec($ch); 
curl_close($ch); 

В результате я получаю примерно соответствует ожидаемому результату в документации Twitter, так что я не думаю, данные повреждены/неправильно: https://dev.twitter.com/oauth/reference/post/oauth2/token

ответ

1

Переключатель выходного заголовка и удалить

$header = curl_setopt($ch, CURLOPT_HEADER, 1); 

или заменить

curl_setopt($ch, CURLOPT_HEADER, false); 
+0

Спасибо, это было прекрасно. – Francesca

1
$a='HTTP/1.1 200 OK cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0 content-length: 153 content-type: application/json;charset=utf-8 date: Mon, 10 Nov 2014 10:58:49 UTC expires: Tue, 31 Mar 1981 05:00:00 GMT last-modified: Mon, 10 Nov 2014 10:58:49 GMT ml: A pragma: no-cache server: tsa_b set-cookie: guest_id=v1%3A141561712923128379; Domain=.twitter.com; Path=/; Expires=Wed, 09-Nov-2016 10:58:49 UTC status: 200 OK strict-transport-security: max-age=631138519 x-connection-hash: 57175e4dba3d726bebb399072c225958 x-content-type-options: nosniff x-frame-options: SAMEORIGIN x-transaction: 2e4b8e053e615c75 x-ua-compatible: IE=edge,chrome=1 x-xss-protection: 1; mode=block {"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAMVfbQAAAAAAK7qYRQOgdZ771TrJ6pZ7nugCwVQ%3DLKcongtwy3lcBDbPSEreC9DfhJk3Gm7qyQInqhFAxYvo1clv4S"}"'; 

preg_match("/\{.*\}/",$a,$m); 

$ja=json_decode($m[0]); 
var_dump($ja,$m); 

выход:

object(stdClass)[1] 
    public 'token_type' => string 'bearer' (length=6) 
    public 'access_token' => string 'AAAAAAAAAAAAAAAAAAAAAMVfbQAAAAAAK7qYRQOgdZ771TrJ6pZ7nugCwVQ%3DLKcongtwy3lcBDbPSEreC9DfhJk3Gm7qyQInqhFAxYvo1clv4S' (length=112) 
Смежные вопросы