POST request with JSON body

后端 未结 5 1435
渐次进展
渐次进展 2020-11-28 20:27

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 se

相关标签:
5条回答
  • 2020-11-28 20:48

    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 <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);
    
    0 讨论(0)
  • 2020-11-28 20:49

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

    <?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'];
    

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

    <?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'];
    
    0 讨论(0)
  • 2020-11-28 20:57

    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...

    0 讨论(0)
  • 2020-11-28 21:01
    <?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);
    
    0 讨论(0)
  • 2020-11-28 21:04

    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:

    <?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>
    
    0 讨论(0)
提交回复
热议问题