POST request with JSON body

匿名 (未验证) 提交于 2019-12-03 02:33:02

问题:

I would like to add a post to a Blogger blog via PHP. Google provided the example below. How to use that with PHP?

You can add a post for a blog by sending a POST request to the post collection URI with a post JSON body:

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 exciting content..." } 

回答1:

You need to use the cURL library to send this request.

 'blogger#post',     'blog' => array('id' => $blogID),     'title' => 'A new post',     'content' => 'With exciting 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']; 

If, for some reason, you can't/don't want to use cURL, you can do this:

 'blogger#post',     'blog' => array('id' => $blogID),     'title' => 'A new post',     'content' => 'With exciting 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']; 


回答2:

I think cURL would be a good solution. This is not tested, but you can try something like this:

$body = '{   "kind": "blogger#post",   "blog": {     "id": "8070105920543249955"   },   "title": "A new post",   "content": "With exciting 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); 


回答3:

If you do not want to use CURL, you could find some examples on stackoverflow, just like this one here: How do I send a POST request with PHP?. I would recommend you watch a few tutorials on how to use GET and POST methods within PHP or just take a look at the php.net manual here: httprequest::send. You can find a lot of tutorials: HTTP POST from PHP, without cURL and so on...



回答4:

I made API sending data via form on website to prosperworks based on @Rocket Hazmat, @dbau and @maraca code. I hope, it will help somebody:

 $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 '

Sent:

'; echo $resultData['published']; //dump var: var_dump($result); } ?>

Name:
Email:


回答5:

 "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); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!