尽管正在发送参数,但JSON API返回错误

时间:2019-01-19 20:24:28

标签: php

我正在使用PHP向JSON API系统(http://help.solarwinds.com/backup/documentation/Content/service-management/json-api/login.htm)发送请求:

class Root(BoxLayout):

    def __init__(self):
        super(Root, self).__init__()
        self.orientation = "vertical"
        #Window.clearcolor = (0.6, 0.6, 0.6,1)
        sm = Manager()

        self.sm = sm   # keep a reference for later use
        self.add_widget(Nav(sm=sm))
        self.add_widget(sm)
        self.add_widget(Button(text='refresh',size_hint=(0.2,0.2),on_release=self.refresh))
        Window.size = (1500, 900)

    def refresh(self,ins):
        self.sm.refresh()

但是它返回$base = 'https://cloudbackup.management/jsonapi'; $vars = array( "jsonrpc" => "2.0", "method" => "Login", "params" => array( "partner" => "partner", "username" => "username", "password" => "pass", ), "id" => "1", ); $ch = curl_init( $base ); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $output = json_decode($response, true); 中的这个数组

$output

我无法弄清为什么会返回错误,因为我发送的是文档中说的正确参数。

有人可以指出我正确的方向吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

将内容类型设置为application / json,因为curl可能默认将其发送为x-www-form-urlencoded

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

还对您的数组进行JSON编码:

$jsonDataEncoded = json_encode($vars);

完整的重构示例:

$base = 'https://cloudbackup.management/jsonapi';

$vars = array(
    "jsonrpc" => "2.0",
    "method" => "Login",
    "params" => array(
        "partner" => "partner",
        "username" => "username",
        "password" => "pass",
    ),
    "id" => "1",
);

$jsonDataEncoded = json_encode($jsonData);
$ch = curl_init( $base );
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
$response = curl_exec($ch);
curl_close($ch);

$output = json_decode($response, true);