Reputation: 30248
I want executed this simple curl operation through php how can i execute this in simple php not any framework , can i do it in simple php or do i need the framework?
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 -
what i tried is :
<?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);
?>
But it is giving me this
The given resource variant is not supported.Please use one of the following: * Variant[mediaType=application/json, language=null, encoding=null]
Upvotes: 1
Views: 2861
Reputation: 145482
Your problem lies here:
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode("{json: $fieldString}"));
The $fieldString
is not actually an string as its name implies. It was an array at this point still. And you are trying to reencode an mangled faux json string, with just Array
as data. Won't work.
Instead use this to get the desired(?) effect:
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fieldString));
Upvotes: 1