php - por - Solicitud POST con cuerpo JSON
request json php (5)
Creo que cURL sería una buena solución. Esto no está probado, pero puedes intentar algo como esto:
$body = ''{
"kind": "blogger#post",
"blog": {
"id": "8070105920543249955"
},
"title": "A new post",
"content": "With <b>exciting</b> content..."
}'';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.googleapis.com/blogger/v3/blogs/8070105920543249955/posts/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: OAuth 2.0 token here"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
Me gustaría agregar una publicación a un blog de Blogger a través de PHP. Google proporcionó el ejemplo a continuación. ¿Cómo usar eso con PHP?
Puede agregar una publicación para un blog enviando una solicitud POST al URI de la colección de publicaciones con un cuerpo JSON posterior:
POST https://www.googleapis.com/blogger/v3/blogs/8070105920543249955/posts/
Authorization: /* OAuth 2.0 token here */
Content-Type: application/json
{
"kind": "blogger#post",
"blog": {
"id": "8070105920543249955"
},
"title": "A new post",
"content": "With <b>exciting</b> content..."
}
Realicé API enviando datos a través del formulario en el sitio web a prosperworks basado en @Rocket Hazmat, @dbau y @maraca code. Espero que ayude a alguien:
<?php
if(isset($_POST[''submit''])) {
//form''s fields name:
$name = $_POST[''nameField''];
$email = $_POST[''emailField''];
//API url:
$url = ''https://api.prosperworks.com/developer_api/v1/leads'';
//JSON data(not exact, but will be compiled to JSON) file:
//add as many data as you need (according to prosperworks doc):
$data = array(
''name'' => $name,
''email'' => array(''email'' => $email)
);
//sending request (according to prosperworks documentation):
// use key ''http'' even if you send the request to https://...
$options = array(
''http'' => array(
''header'' => "Content-Type: application/json/r/n".
"X-PW-AccessToken: YOUR_TOKEN_HERE/r/n".
"X-PW-Application:developer_api/r/n".
"X-PW-UserEmail: YOUR_EMAIL_HERE/r/n",
''method'' => ''POST'',
''content'' => json_encode($data)
)
);
//engine:
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }
//compiling to JSON (as wrote above):
$resultData = json_decode($result, TRUE);
//display what was sent:
echo ''<h2>Sent: </h2>'';
echo $resultData[''published''];
//dump var:
var_dump($result);
}
?>
<html>
<head>
</head>
<body>
<form action="" method="POST">
<h1><?php echo $msg; ?></h1>
Name: <input type="text" name="nameField"/>
<br>
Email: <input type="text" name="emailField"/>
<input type="submit" name="submit" value="Send"/>
</form>
</body>
</html>
Si no desea usar CURL, puede encontrar algunos ejemplos en , como aquí: ¿Cómo envío una solicitud POST con PHP? . Te recomendaría ver algunos tutoriales sobre cómo usar los métodos GET y POST en PHP o simplemente echar un vistazo al manual de php.net aquí: httprequest::send . Puedes encontrar muchos tutoriales: HTTP POST de PHP, sin CURL y así sucesivamente ...
Debe usar la biblioteca cURL para enviar esta solicitud.
<?php
// Your ID and token
$blogID = ''8070105920543249955'';
$authToken = ''OAuth 2.0 token here'';
// The data to send to the API
$postData = array(
''kind'' => ''blogger#post'',
''blog'' => array(''id'' => $blogID),
''title'' => ''A new post'',
''content'' => ''With <b>exciting</b> content...''
);
// Setup cURL
$ch = curl_init(''https://www.googleapis.com/blogger/v3/blogs/''.$blogID.''/posts/'');
curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPHEADER => array(
''Authorization: ''.$authToken,
''Content-Type: application/json''
),
CURLOPT_POSTFIELDS => json_encode($postData)
));
// Send the request
$response = curl_exec($ch);
// Check for errors
if($response === FALSE){
die(curl_error($ch));
}
// Decode the response
$responseData = json_decode($response, TRUE);
// Print the date from the response
echo $responseData[''published''];
Si, por alguna razón, no puede / no quiere usar cURL, puede hacer esto:
<?php
// Your ID and token
$blogID = ''8070105920543249955'';
$authToken = ''OAuth 2.0 token here'';
// The data to send to the API
$postData = array(
''kind'' => ''blogger#post'',
''blog'' => array(''id'' => $blogID),
''title'' => ''A new post'',
''content'' => ''With <b>exciting</b> content...''
);
// Create the context for the request
$context = stream_context_create(array(
''http'' => array(
// http://www.php.net/manual/en/context.http.php
''method'' => ''POST'',
''header'' => "Authorization: {$authToken}/r/n".
"Content-Type: application/json/r/n",
''content'' => json_encode($postData)
)
));
// Send the request
$response = file_get_contents(''https://www.googleapis.com/blogger/v3/blogs/''.$blogID.''/posts/'', FALSE, $context);
// Check for errors
if($response === FALSE){
die(''Error'');
}
// Decode the response
$responseData = json_decode($response, TRUE);
// Print the date from the response
echo $responseData[''published''];
<?php
// Example API call
$data = array(array (
"REGION" => "MUMBAI",
"LOCATION" => "NA",
"STORE" => "AMAZON"));
// json encode data
$authToken = "xxxxxxxxxx";
$data_string = json_encode($data);
// set up the curl resource
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://domainyouhaveapi.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
''Content-Type:application/json'',
''Content-Length: '' . strlen($data_string) ,
''API-TOKEN-KEY:''.$authToken )); // API-TOKEN-KEY is keyword so change according to ur key word. like authorization
// execute the request
$output = curl_exec($ch);
//echo $output;
// Check for errors
if($output === FALSE){
die(curl_error($ch));
}
echo($output) . PHP_EOL;
// close curl resource to free up system resources
curl_close($ch);