Получение ответа JSON с помощью cURLPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Получение ответа JSON с помощью cURL

Сообщение Anonymous »

Я не знаю, что делаю не так, но я уже потерял пару дней, мучаясь с этим.
Вот мой запрос cURL из командной строки:

Код: Выделить всё

curl -i -H "Accept: text/html" http://laravel.project/api/v1/users/4
Это возвращает:

Код: Выделить всё

HTTP/1.1 200 OK
Server: nginx/1.6.2
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-cache
Date: Sun, 29 Mar 2015 10:33:36 GMT
Set-Cookie: laravel_session=eyJpdiI6ImNPTkZIYVJZSVRKaHBOZTR3SWh0dHc9PSIsInZhbHVlIjoiblpZYVJlN2dBY1ljejNIYUQycXpsNXRWd1I5a3JSRG8wSWdDOWlHVTMrYUcrdDBNVmVuZUNkOGtJb2M4bXFpTFF3cUdoTFZOVXBWXC82Q1luSGd5bjJBPT0iLCJtYWMiOiI0ZTEwOWQxMmVhMzY2NjI1Yzc1MTBmZmRmYjUyOGQwNDlhYzRjOTNiM2FiOWIyN2E1YjA0OTM4YTUxZmNmMzMzIn0%3D; expires=Sun, 29-Mar-2015 12:33:36 GMT; Max-Age=7200; path=/; httponly

{
"data":{
"id":4,
"name":"Helena",
"email":"hh@gmail.com",
"created_at":"2015-03-26 21:13:16",
"updated_at":"2015-03-26 21:13:16"
}
}
Итак, все выглядит нормально: тип контента установлен правильно, а ответ в формате JSON.
Но теперь посмотрите, что произойдет, если я использую API с помощью Curl в PHP:

Код: Выделить всё

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $final_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
$result = curl_exec($ch);

return json_decode($result);
Я получаю такой ответ:

Код: Выделить всё

{#165
+"data": {#167
+"id": 4
+"name": "Helena"
+"email": "hh@gmail.com"
+"created_at": "2015-03-26 21:13:16"
+"updated_at": "2015-03-26 21:13:16"
}
}
И если я верну $result без json_decode, я получу следующее:

Код: Выделить всё

"{
"data":{
"id":4,
"name":"Helena",
"email":"hh@gmail.com",
"created_at":"2015-03-26 21:13:16",
"updated_at":"2015-03-26 21:13:16"
}
}"
Правильный ответ, но в кавычках. Я читал в документации PHP, что Curl_opt_returntranfer возвращает результат в виде строки, но я не могу быть единственным человеком на планете, который просто хочет получить JSON.
Это мой класс ApiController:

Код: Выделить всё

class ApiController extends Controller {

// Base controller for API Controllers

protected $statusCode = 200;

protected function respond($data)
{
return Response::json([
'data' => $data,

]);
}

protected function respondNotFound($message = 'No data found')
{
return Response::json([
'error' => [
'message' => $message,
'status_code' => $this->getStatusCode(),
]
]);
}
}


Это мой UserController:

Код: Выделить всё

class UserController extends ApiController {

public function show($user)
{

if ($user == null)
return $this->setStatusCode(404)->respondNotFound('User not found');

return $this->respond($user);
}

}



Подробнее здесь: https://stackoverflow.com/questions/293 ... -with-curl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»