2011-09-02 105 views
1

我想通过php执行这个简单的卷曲操作我该如何在简单的PHP中执行此操作,而不是任何框架,我可以在简单的PHP中执行操作还是需要该框架?如何在PHP中为此卷曲操作创建REST API

curl -XPOST localhost:12060/repository/schema/fieldType -H 'Content-Type: application/json' -d ' 
{ 
    action: "create", 
    fieldType: { 
    name: "n$name", 
    valueType: { primitive: "STRING" }, 
    scope: "versioned", 
    namespaces: { "my.demo": "n" } 
    } 
}' -D - 

我的尝试是:

<?php 
$url="localhost:12060/repository/schema/fieldType";  
//open connection 
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page 
CURLOPT_HEADER => false, // don't return headers 
CURLOPT_FOLLOWLOCATION => true, // follow redirects 
CURLOPT_ENCODING => "", // handle all encodings 
CURLOPT_USERAGENT => "spider", // who am i 
CURLOPT_AUTOREFERER => true, // set referer on redirect 
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect 
CURLOPT_TIMEOUT => 120, // timeout on response 
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects 
); 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL,$url); 
$fieldString=array(
    "action"=> "create", 
    "fieldType"=>array(
     "name"=> "n$name", 
     "valueType"=> array("primitive"=> "STRING"), 
     "scope"=> "versioned", 
     "namespaces"=> array("my.demo"=> "n") 
    ) 
); 
//for some diff 
curl_setopt($ch, CURLOPT_HTTPHEADERS, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode("{json: $fieldString}")); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt_array($ch, $options); 
//execute post 
$result = curl_exec($ch); 
$header = curl_getinfo($ch); 
echo $result; 
//close connection 
curl_close($ch); 




?> 

但它给我这个

The given resource variant is not supported.Please use one of the following: * Variant[mediaType=application/json, language=null, encoding=null] 

回答

1

你的问题就在这里:

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode("{json: $fieldString}")); 

$fieldString并不是真正的字符串作为它的名字im层数。这仍然是一个数组。并且您正试图重新编码一个损坏的人造json字符串,只有Array作为数据。将无法工作。

而是用它来得到想要的效果(?):

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fieldString)); 
+0

改变,但仍是同样的错误? – XMen

+0

http://stackoverflow.com/questions/5357900/content-type-not-changing-with-curlopt-httpheaders – mario

+0

改变头到头,但现在我得到一个JSON错误错误请求400没有。错误,这是JSON的一部分{“message”:“无效的限定名称,不包含$:n”,},但是当我通过CURL运行时,它给我提供了有关该条目已存在的409错误。 – XMen