将URL管道的命令行cURL转换为python

时间:2018-01-05 20:52:49

标签: php curl

我有这个命令行cURL示例:

curl -X PUT -H "X-Auth-Token: $AUTH_TOKEN" \
     -d "{\"data\":{\"name\":\"Device1 Callflow\", \"numbers\":[\"1001\"], \"flow\":{\"module\":\"device\",\"data\":{\"id\":\"$DEVICE_ID\"}}}}" \
     http://ip.add.re.ss:8000/v2/accounts/$ACCOUNT_ID/callflows | python -mjson.tool

我的任务是将其转换为PHP函数,其中所需的值将传递到函数中:

function someFunc($ AUTH_TOKEN,$ ACCOUNT_ID,$ DEVICE_ID,$ numbers){}

通常,我使用这种代码:

function setLimits($auth_token, $accountID, $feature1_cnt, $feature2_cnt) {
    $service_url = "http://ip.add.re.ss:8000/v2/accounts/$accountID/limits";
    $data = '{"data":{"feature1": ' . $feature1_cnt . ',"feature2": ' . $feature2_cnt . '}}';
    $ch = curl_init($service_url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Auth-Token: $auth_token",'Content-Type: application/json', 'Content-Length: ' . strlen($data)));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    if ($response === false) {
        $info = curl_getinfo($ch);
        curl_close($ch);
        die('error occured during curl exec. Additional info: ' . var_export($info));
    }
    $decoded = json_decode($response);
    if (isset($decoded->response->status) && $decoded->response->status == 'ERROR') {
        die('error occured: ' . $decoded->response->errormessage);
  }
    return(true);
}

但是,对于特定的API调用,我需要将其作为服务URL传递:

http://ip.add.re.ss:8000/v2/accounts/ $ ACCOUNT_ID / callflows | python -mjson.tool

我该怎么做?

1 个答案:

答案 0 :(得分:0)

首先,改变:

$data = '{"data":{"feature1": ' . $feature1_cnt . ',"feature2": ' . $feature2_cnt . '}}';

为:

$data = [
    "data" => [
        "feature1" => $feature1_cnt,
        "feature2" => $feature2_cnt
    ]
];

输入JSON时出错,并且赢得很容易找到或修复。

其次,python -mjson.tool

  

json.tool [...]验证和漂亮打印:

PHP的JSON验证几乎只是检查json_decode()是否返回NULL,然后您可以检查json_last_error()json_last_error_msg()是否有错误信息。它不健全。

您可以在"漂亮打印"中编码JSON。格式:

json_encode($foo, JSON_PRETTY_PRINT);

但我不能想到一个世俗的理由,为什么你会想要这样做,除非有人眼球会看到它。

最后,在回答你的问题时,我意识到我并不知道你会得到什么,你真的需要澄清为什么你认为你需要做任何事情你问过。 [除了验证之外,我想]