Как создать REST API для этой операции curl в PHP - PullRequest
1 голос
/ 02 сентября 2011

Я хочу выполнить эту простую операцию curl через php. Как я могу выполнить это на простом php, а не на любом фреймворке, могу ли я сделать это на простом php или мне нужен фреймворк?

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 Ответ

1 голос
/ 02 сентября 2011

Ваша проблема заключается здесь:

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

$fieldString на самом деле не строка, как следует из ее названия.На данный момент это был массив.И вы пытаетесь перекодировать искаженную искусственную строку JSON, используя только Array в качестве данных.Не будет работать.

Вместо этого используйте это, чтобы получить желаемый (?) Эффект:

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fieldString));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...