2016-02-13 13 views
-5

Мне нравится публиковать объект JSON с curl. Все, что у меня есть, это код:Как сделать PHP curl post

curl -X POST \ 
-H "Accept: application/json" \ 
-H "X-Access-Token: ###secureToken###" \ 
-H "Cache-Control: no-cache" \ 
-d '{ 
    "frames": [ 
     { 
      "index": 0, 
      "text": "SUCCESS", 
      "icon": null 
     } 
    ] 
}' \ 
https://developer.lametric.com/api/V1/dev/widget/update/com.lametric.###appid### 

Что делать теперь именно так, чтобы это произошло на PHP? Не могли бы вы привести пример?

+1

Я чтобы закрыть этот вопрос как вне темы, потому что в руководстве есть примеры. http://php.net/manual/en/curl.examples-basic.php – chris85

+0

примеры в документации php не очень полезны, чтобы быть честными –

ответ

0
// init curl 

$handle = curl_init(); 

// set options/parameters 

curl_setopt($handle, CURLOPT_URL,    'https://developer.lametric.c...'); 
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($handle, CURLOPT_POSTFIELDS,  'the-json-encoded-data-here'); 
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); // you want to get the response 

// set headers 

curl_setopt($handle, CURLOPT_HTTPHEADER,  array( 'Accept: application/json', 
                 '....')); 
// execute the request and get the response 

$response = curl_exec($handle); 

// get the status too 

$status = curl_getinfo($handle, CURLINFO_HTTP_CODE); 

// release resources 

curl_close($handle); 

Просто пример/введение.

Вы инициализируете завиток php.

Установите все параметры.

Отправить заявку.

Я не буду писать весь код для вас.

PHP Reference ясно (и есть примеры тоже)

http://php.net/manual/en/book.curl.php

SO есть примеры тоже:

PHP + curl, HTTP POST sample code?

0

Или без завитка, очень общий шаблон, который я использую, чтобы сохранить зависимости вниз.

<?php 

$reqBody = array(
    'frames' => array(
     'index' => 0, 
     'text' => "SUCCESS", 
     'icon' => null 
    ) 
); 


$bodyString = json_encode($reqBody); 

$access_token = "###secureToken###"; 
$context_options = array (
    'http' => array (
     'method' => 'POST', 
     'header' => "Accept: application/json\r\nX-Access-Token: " . $access_token . "\r\nCache-Control: no-cache\r\nContent-Length: " . strlen($bodyString) . "\r\n", 
     'content' => $bodyString 
     ) 
    ); 
$context_for_post = stream_context_create($context_options); 

$response = file_get_contents($"https://developer.lametric.com/api/V1/dev/widget/update/com.lametric.###appid###", FALSE, $context_for_post); 

// Check for errors 
if(!$response){ 
    die("<h2>ERROR</h2>"); 
} 

// Decode the response 
$responseData = json_decode($response, TRUE); 

// some examples of parsing response json ... 
if ($responseData['message'] != null) { 

} 
$this->sessionToken = $responseData['message']['data']['results']['token']; 
if($this->sessionToken === FALSE) { 
    die('Failed to Parse Response'); 
} 

?> 

Если веб-сервер, кажется, не нравится ваш пост, он может ожидать, что тип форм-данных POST, поэтому настроить тело и заголовки, как это:

$bodyString = "------WebKitFormBoundaryiAsuvpNuslAE3Kqx\r\nContent-Disposition: form-data; name=\"json\"\r\n\r\n" . 
    json_encode($reqBody) . 
    "\r\n------WebKitFormBoundaryiAsuvpNuslAE3Kqx--\r\n"; 

$access_token = "###secureToken###"; 
$context_options = array (
    'http' => array (
     'method' => 'POST', 
     'header' => "X-Access-Token: " . $access_token . "\r\nCache-Control: no-cache\r\nAccept: application/json\r\nContent-Type: multipart/form-data; boundary=----WebKitFormBoundaryiAsuvpNuslAE3Kqx\r\n" . "Content-Length: " . strlen($bodyString) . "\r\n", 
     'content' => $bodyString 
     ) 
    );