如何连接到 PHP 中的以下示例 SOAP 服务并向其发出请求?
How do I connect to and make a request to the following sample SOAP service in PHP?
我刚刚注意到我将不得不在不久的将来与 SOAP API 进行交互。不过到目前为止,我只使用过 REST APIs 而从未使用过 SOAP API.
我一直在阅读有关 SOAP API 的文章,到目前为止我的(很可能是错误的)理解如下:
- 您首先连接到 SOAP 服务。当您连接时,您将 URL 键入 WSDL 文件,然后它会告诉您哪些 "services"(我在这里使用的术语正确吗?)可通过 SOAP API.
- 一旦知道要调用哪个服务,就可以使用必要的参数调用该服务,并向 SOAP 服务器发送 XML 请求,SOAP 服务器会发回 XML 响应。
我有两个问题:
- 我对上述 SOAP 的理解是否正确?
- 如何使用 PHP 连接并向以下示例 SOAP API 发出请求:http://www.webservicex.com/globalweather.asmx?op=GetWeather
(如果上面链接的示例 SOAP API 不是一个很好的示例,那么我愿意学习如何将 SOAP 与任何其他可用的示例 SOAP API 一起使用。 )
Edit: pawelwaw,我写了下面的示例代码来测试一切,但似乎无论我在 [=] 中为 CityName
使用什么值13=] 操作,我没有得到任何数据。是我的理解不正确,还是 SOAP API 不是很好?
<?php
$client = new SoapClient('http://www.webservicex.com/globalweather.asmx?wsdl');
echo '<h2>Types:</h2>';
echo '<pre>';
var_dump($client->__getTypes());
echo '</pre>';
echo '<h2>Functions:</h2>';
echo '<pre>';
var_dump($client->__getFunctions());
echo '</pre>';
echo '<h2>GetCitiesByCountry:</h2>';
echo '<pre>';
echo htmlentities($client->GetCitiesByCountry([
'CountryName' => 'Poland'
])->GetCitiesByCountryResult);
echo '</pre>';
echo '<h2>GetWeather:</h2>';
echo '<pre>';
var_dump($client->GetWeather([
'CityName' => 'Krakow',
'CountryName' => 'Poland'
]));
echo '</pre>';
我通常使用 SOAP api。
而对于这项服务
您可以使用此示例代码获取国家/地区的城市
<?php
$api = new SoapClient ( 'http://www.webservicex.com/globalweather.asmx?WSDL' );
$res = $api->GetCitiesByCountry(array( 'CountryName' =>"Poland"));
var_dump($res);
?>
然后你就可以运行这个api的第二种方法来获取天气
http://www.webservicex.com/globalweather.asmx?op=GetWeather
希望对您有所帮助。
函数 GetWeather ( http://www.webservicex.com/globalweather.asmx?op=GetWeather ) 似乎无法正常工作。当我在网站上手动填写值时,没有数据响应,但是对于函数 GetCitiesByCountry ( http://www.webservicex.com/globalweather.asmx?op=GetCitiesByCountry ) returns 数据。
我对 API 没有多少经验,但这应该可以工作,在我看来,SOAP 中的此功能存在问题,因为也不能通过 http 工作。
我通过 REST 对其进行了测试,但该功能不符合规范。
我刚刚注意到我将不得不在不久的将来与 SOAP API 进行交互。不过到目前为止,我只使用过 REST APIs 而从未使用过 SOAP API.
我一直在阅读有关 SOAP API 的文章,到目前为止我的(很可能是错误的)理解如下:
- 您首先连接到 SOAP 服务。当您连接时,您将 URL 键入 WSDL 文件,然后它会告诉您哪些 "services"(我在这里使用的术语正确吗?)可通过 SOAP API.
- 一旦知道要调用哪个服务,就可以使用必要的参数调用该服务,并向 SOAP 服务器发送 XML 请求,SOAP 服务器会发回 XML 响应。
我有两个问题:
- 我对上述 SOAP 的理解是否正确?
- 如何使用 PHP 连接并向以下示例 SOAP API 发出请求:http://www.webservicex.com/globalweather.asmx?op=GetWeather
(如果上面链接的示例 SOAP API 不是一个很好的示例,那么我愿意学习如何将 SOAP 与任何其他可用的示例 SOAP API 一起使用。 )
Edit: pawelwaw,我写了下面的示例代码来测试一切,但似乎无论我在 [=] 中为 CityName
使用什么值13=] 操作,我没有得到任何数据。是我的理解不正确,还是 SOAP API 不是很好?
<?php
$client = new SoapClient('http://www.webservicex.com/globalweather.asmx?wsdl');
echo '<h2>Types:</h2>';
echo '<pre>';
var_dump($client->__getTypes());
echo '</pre>';
echo '<h2>Functions:</h2>';
echo '<pre>';
var_dump($client->__getFunctions());
echo '</pre>';
echo '<h2>GetCitiesByCountry:</h2>';
echo '<pre>';
echo htmlentities($client->GetCitiesByCountry([
'CountryName' => 'Poland'
])->GetCitiesByCountryResult);
echo '</pre>';
echo '<h2>GetWeather:</h2>';
echo '<pre>';
var_dump($client->GetWeather([
'CityName' => 'Krakow',
'CountryName' => 'Poland'
]));
echo '</pre>';
我通常使用 SOAP api。 而对于这项服务 您可以使用此示例代码获取国家/地区的城市
<?php
$api = new SoapClient ( 'http://www.webservicex.com/globalweather.asmx?WSDL' );
$res = $api->GetCitiesByCountry(array( 'CountryName' =>"Poland"));
var_dump($res);
?>
然后你就可以运行这个api的第二种方法来获取天气 http://www.webservicex.com/globalweather.asmx?op=GetWeather
希望对您有所帮助。
函数 GetWeather ( http://www.webservicex.com/globalweather.asmx?op=GetWeather ) 似乎无法正常工作。当我在网站上手动填写值时,没有数据响应,但是对于函数 GetCitiesByCountry ( http://www.webservicex.com/globalweather.asmx?op=GetCitiesByCountry ) returns 数据。 我对 API 没有多少经验,但这应该可以工作,在我看来,SOAP 中的此功能存在问题,因为也不能通过 http 工作。 我通过 REST 对其进行了测试,但该功能不符合规范。