从Softlayer API获取全局IP

时间:2017-04-26 15:11:06

标签: ibm-cloud-infrastructure

我正在尝试使用global_ip_id获取SoftLayer::API::SOAP。但是当我尝试

$global_ip_id = $client->getGlobalIpRecords()->result->[0]->{id};

我收到错误:

  

不能使用未定义的值作为ARRAY参考   / usr / bin / reroute_global第19行

1 个答案:

答案 0 :(得分:0)

我不知道你使用的是什么框架或语言,但我确信这是一个错误使用它的问题。

您从该调用中获得的SOAP响应应该像这样

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://api.service.softlayer.com/soap/v3.1/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Header>
    <ns1:totalItems>
      <amount>7</amount>
    </ns1:totalItems>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <ns1:getGlobalIpRecordsResponse>
      <getGlobalIpRecordsReturn SOAP-ENC:arrayType="ns1:SoftLayer_Network_Subnet_IpAddress_Global[7]" xsi:type="ns1:SoftLayer_Network_Subnet_IpAddress_GlobalArray">
        <item xsi:type="ns1:SoftLayer_Network_Subnet_IpAddress_Global">
          <description xsi:nil="true"/>
          <destinationIpAddressId xsi:nil="true"/>
          <id xsi:type="xsd:int">11111</id>
          <ipAddressId xsi:type="xsd:int">22222</ipAddressId>
          <typeId xsi:type="xsd:int">1</typeId>
        </item>
      </getGlobalIpRecordsReturn>
    </ns1:getGlobalIpRecordsResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

现在,如何从该响应中获取数据取决于您使用的语言或框架,因为响应是某些语言中的XML,您需要浏览XML的标记,例如

result->{Body}->{getGlobalIpRecordsResponse}->{getGlobalIpRecordsReturn }->[0]->{id}

因此,我建议您确保您的语言或框架如何允许您浏览SOAP响应,因为您目前遇到的问题是由于您尝试访问数据的方式错误。

现在,如果您使用的是Softlayer的Perl客户端,您应该使用以下内容:

my $client = SoftLayer::API::SOAP->new('SoftLayer_Account', undef, $api_username, $api_key);
my $output = $client->getGlobalIpRecords();
print $output->result->[0]->{'id'};

正如您所看到的,一切取决于您使用的语言和框架

如果您使用Perl,错误可能是由于结果为空,在这种情况下您需要验证这不是空的,请参阅Error: Can't use an undefined value as an ARRAY reference以获取更多信息。

此致