无法将POST curl从命令行转换为php

时间:2014-07-15 16:30:09

标签: php post curl parse-platform

我无法将curl命令转换为php。

这部分效果很好。

CURL命令,用于在我的Parse.com数据库中添加一个条目:

curl -X POST \
  -H "X-Parse-Application-Id: my_id" \
  -H "X-Parse-REST-API-Key: api_id" \
  -H "Content-Type: application/json" \
  -d "{\"SiteID\":\"foundID\",\"dataUsedString\":\"foundUsage\",\"usageDate\":\"foundDate\", \"monthString\":\"foundMonth\", \"dayString\":\"foundDay\",\"yearString\":\"foundYear\"}" \
  https://api.parse.com/1/classes/MyClass

已解答答案:

我创建了这个php脚本来复制命令:

   <?php 
   $ch = curl_init('https://api.parse.com/1/classes/MyClass');

curl_setopt($ch,CURLOPT_HTTPHEADER,
    array('X-Parse-Application-Id:my_id',
'X-Parse-REST-API-Key:api_id',
'Content-Type: application/json'));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"SiteID\":\"foundID\",\"dataUsedString\":\"foundUsage\",\"usageDate\":\"foundDate\", \"monthString\":\"foundMonth\", \"dayString\":\"foundDay\",\"yearString\":\"foundYear\"}");

curl_exec($ch);
curl_close($ch);
?>

2 个答案:

答案 0 :(得分:1)

你错过了一些重要的配置。 这些是使用POST设置CURL发送请求,第二个是要发送的数据。 (RAW DATA作为字符串发送到POSTFIELDS,如果你发送数组 - 它会自动追加标题“multipart / form-data”

$ch = curl_init('https://api.parse.com/1/classes/MyClass');

curl_setopt($ch,CURLOPT_HTTPHEADER,
  array(
    'X-Parse-Application-Id:my_id',
    'X-Parse-REST-API-Key:api_id',
    'Content-Type: application/json'
  )
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"SiteID\":\"foundID\",\"dataUsedString\":\"foundUsage\",\"usageDate\":\"foundDate\", \"monthString\":\"foundMonth\", \"dayString\":\"foundDay\",\"yearString\":\"foundYear\"}");
curl_exec($ch);
curl_close($ch);

HTH:)

答案 1 :(得分:0)

由于您正在执行POST请求,因此您需要告诉Curl这样做:

$postData = '{"SiteID":"foundID","dataUsedString":"foundUsage","usageDate":"foundDate", "monthString":"foundMonth", "dayString":"foundDay","yearString":"foundYear"}';

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

您可能还需要提供Content-Length标题:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'X-Parse-Application-Id: my_id',
  'X-Parse-REST-API-Key: api_id',
  'Content-Type: application/json',                                                           
  'Content-Length: '.strlen($postData))                                                                       
);