0

I am attempting to consume a .NET webservice that is requesting a RequestObject of options and I have no idea how that works in cURL. Does anyone know?

For this webservice: https://uat.petfirsthealthcare.com/pfh.service.webservices/coreservice.svc/json/GetBreedList I need to send a Request Object 'CoreServiceGetBreedListRequest' with a value SpeciesId of 1.

Here is what I have, but missing the value.

$request = 'https://uat.petfirsthealthcare.com/pfh.service.webservices/coreservice.svc/json/GetBreedList';
        $session = curl_init();
        curl_setopt($session, CURLOPT_URL, $request);
        curl_setopt($session, CURLOPT_HEADER, false);
        curl_setopt($session, CURLOPT_SSLVERSION,3);
        curl_setopt($session, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($session, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($session, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($session, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        $response = curl_exec($session);
        curl_close($session);

Thanks for any help!

4

2 回答 2

2

那是 SOAP 服务,而不是 REST 服务。尽管您可以通过阅读 WSDL 定义和反复试验来使用 curl() 来使用它,但是使用PHP 的 SOAP 库来使用它要容易得多。

使用 SoapClient 类。当它请求 WSDL 文件时,只需传递:

https://uat.petfirsthealthcare.com/pfh.service.webservices/CoreService.svc?wsdl

或者下载它,上传到你的服务器并设置路径(但如果服务发生变化,你可能会发现问题)。该文件将为 SoapClient 类提供可用的方法和所需的参数(和参数类型),以向服务发出正确的请求。注意参数类型,因为 PHP 倾向于将任何内容强制转换为字符串,并且 SoapClient 类对参数类型很挑剔(如果 WSDL 声明它必须是整数,那么发送字符串可能会失败,即使它是“3” )。

于 2012-11-05T20:23:13.727 回答
1

如果要使用 cURL,则必须使用 CURLOPT_HTTPHEADER 并传递内容类型 application/json 的数组以及内容长度。

在 CURLOPT_POSTFIELDS 中,您还可以发送格式正确的请求,如下所示:

$object = json_encode(array('Speciesid' => 1));

内容长度为 =strlen($object)

于 2012-11-05T20:28:08.853 回答