【问题标题】:Azure API - PHP RequestAzure API - PHP 请求
【发布时间】:2015-04-05 13:01:07
【问题描述】:

我试图让这个 API 在 PHP 中工作

API 文档在这里

https://studio.azureml.net/apihelp/workspaces/3e1515433b9d477f8bd02b659428cddc/webservices/aca8dc0fd2974e7d849bbac9e7675fda/endpoints/cb1b14b17422435984943d41a5957ec7/score

我真的被卡住了,我离让它工作很近了。如果有人能发现任何错误,下面是我当前的代码。我还包含了我的 API 密钥,因为它一旦工作就会更改。

<?php
 error_reporting(E_ALL);
 ini_set('display_errors', 1);

$url = 'https://ussouthcentral.services.azureml.net/workspaces/3e1515433b9d477f8bd02b659428cddc/services/cb1b14b17422435984943d41a5957ec7/execute?api-version=2.0&details=true';
 $api_key = '5ve72/xxLuzaexQu7LyRBl1iRdGqAQiQ1ValodnS7DG+F0NzgHkaLyk1J30MXrlWFovzPzlurui/o5jeH7RMiA=='; 


 $data = array(
     'Inputs'=> array(
         'input1'=> array(
             'ColumnNames' => ['Client_ID'],
             'Values' => [ [ '0' ], [ '0' ], ]
         ),
     ),
     'GlobalParameters' => array()
 );

$body = json_encode($data);

$ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer '.$api_key, 'Accept: application/json'));
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 echo 'Curl error: ' . curl_error($ch);
 $response  = curl_exec($ch);

curl_close($ch);
 var_dump($response);

我仍然没有从 curl_error 得到错误,并且 var 转储只是说 bool(false)

【问题讨论】:

    标签: php rest azure curl


    【解决方案1】:

    您遇到了元素 GlobalParameters 的问题,请将其声明为 StdClass 而不是空数组。试试这个:

    <?php
    
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    $url = 'https://ussouthcentral.services.azureml.net/workspaces/3e1515433b9d477f8bd02b659428cddc/services/cb1b14b17422435984943d41a5957ec7/execute?api-version=2.0&details=true';
    $api_key = '5ve72/xxLuzaexQu7LyRBl1iRdGqAQiQ1ValodnS7DG+F0NzgHkaLyk1J30MXrlWFovzPzlurui/o5jeH7RMiA=='; 
    
    
    $data = array(
            'Inputs'=> array(
                'input1'=> array(
                    'ColumnNames' => ['Client_ID'],
                    'Values' => [ [ '0' ], [ '0' ], ]
                    ),
                ),
            'GlobalParameters' => new StdClass(),
            );
    
    
    $body = json_encode($data);
    
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer '.$api_key, 'Accept: application/json'));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $response  = curl_exec($ch);
    
    echo $body . PHP_EOL . PHP_EOL;
    echo 'Curl error: ' . curl_error($ch);
    
    curl_close($ch);
    var_dump($response);
    

    【讨论】:

      【解决方案2】:

      您必须在curl_exec() 之后运行curl_error(),因为curl_error() 确实会返回一个包含当前会话的最后一个错误的字符串。 (source : php.net)

      那就往这边走

      $response  = curl_exec($ch);
      echo 'Curl error: ' . curl_error($ch);  
      

      你应该有一个错误告诉你哪里出了问题。

      【讨论】:

      • 谢谢!这有帮助!现在我得到 string(194) "{"error":{"code":"BadArgument","message":"Invalid argument provided.","details":[{"code":"RequestBodyInvalid","message" :"未提供请求正文或反序列化请求正文时出错。"}]}}"
      猜你喜欢
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多