如何将命令行curl转换为php curl

时间:2015-10-29 03:49:01

标签: php curl oauth

我需要将此命令行cURL转换为php cURL并回显结果

curl -H "Content-Type: application/json" -d '{ "code":"<code>", "client_id": "<client_id>", "client_secret": "<client_secret>"}' https://www.example.com/oauth/access_token

怎么办呢?

2 个答案:

答案 0 :(得分:1)

尝试这种简单的方法:

$data = array("code"=>"123", "client_id"=> "123", "client_secret"=> "123");                                                                 
$data_string = json_encode($data);                                                                                   

$ch = curl_init('https://www.example.com/oauth/access_token');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   

$result = curl_exec($ch);

将123替换为您的值。以下是curl_setopt()

的手册

答案 1 :(得分:0)

这样的事情应该有效,假设您需要将数据发布到URL:

<?php
  // URL that the data will be POSTed to
  $curl_url = 'https://www.example.com/oauth/access_token';
  // Convert the data into an array
  $curl_data_arr = array('{ "code":"<code>", "client_id": "<client_id>", "client_secret": "<client_secret>"}');
  // Prepare to post as an array
  $curl_post_fields = array();
  foreach ($curl_data_arr as $key => $value) {
    // Assuming you need the values url encoded, this is an easy way
    $curl_post_fields[] = $key . '=' . urlencode($value);
  }
  $curl_header = array('Content-Type: application/json');
  $curl_array = array(
    CURLOPT_URL => $curl_url,
    CURLOPT_HTTPHEADER => $curl_header,
    CURLOPT_POSTFIELDS => implode('&', $curl_post_fields),
    CURLOPT_POST => TRUE,
    CURLOPT_RETURNTRANSFER => TRUE,
  );
  // Initialize cURL
  $curl = curl_init();
  // Tell cURL to use the array of options we just set up
  curl_setopt_array($curl, $curl_array);
  // Assign the result to $data
  $data = curl_exec($curl);
  // Empty variable (at first) to avoid errors being displayed
  $result = '';
  // Check for errors
  if ($error = curl_error($curl)) {
    // If there's an error, assign its value to $result
    $result = $error;
  }
  curl_close($curl);
  // If there's no errors...
  if (empty($error)) {
    // ... instead assign the value of $data to $result
    $result = $data;
  }
  echo $result;