[英]PHP curl Soap request returning 404
我正在尝试使用PHP的cURL和SOAP来执行对公共服务器的请求,然后公共服务器应使用一些图像URL进行响应。
我设法将其全部设置好,问题是,我得到的所有答复都是404-找不到文件或目录。 据我所知,我遵循了服务提供者使用SOAP的方法。 我提供了一个“ nobbnr”,它是一个产品标识符,然后将其用于返回产品图像。 我有什么想念的吗? 网址看起来正确吗?
他们的“食谱”如下: http : //produktinfo.byggtjeneste.no/ProduktInfo.asmx?op=HentMedierForNobbNo (请看肥皂1.1)
我完整的PHP代码如下:
<?php
$soap_request = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$soap_request .= "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n";
$soap_request .= " <soap:Body>\n";
$soap_request .= " <HentMedierForNobbNo xmlns=\"http://produktinfo.byggtjeneste.no/\">\n";
$soap_request .= " <nobbnr>10871051</nobbnr>\n";
$soap_request .= " </HentMedierForNobbNo>\n";
$soap_request .= " </soap:Body>\n";
$soap_request .= "</soap:Envelope>";
$header = array(
"POST /ProduktInfo.asmx HTTP/1.1",
"Host: produktinfo.byggtjeneste.no",
"Content-type: text/xml; charset=utf-8",
"Content-length: ".strlen($soap_request),
"SOAPAction: \"http://produktinfo.byggtjeneste.no/HentMedierForNobbNo\""
);
$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, "http://produktinfo.byggtjeneste.no/HentMedierForNobbNo" );
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($soap_do, CURLOPT_TIMEOUT, 10);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST, true );
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $soap_request);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header);
$xml_result = curl_exec($soap_do);
// check for errors
if ($xml_result === false) {
$error_occurred = true;
}
else {
$xml = new SimpleXMLElement($xml_result);
print_r($xml);
}
?>
您要访问的服务的正确URL地址是http://produktinfo.byggtjeneste.no/ProduktInfo.asmx/HentMedierForNobbNo 。
顺便说一句:看一下http://php.net//manual/pl/class.soapclient.php (或其他任何SOAP客户端,例如nuSoap)。 您不必手动创建请求XML。 当调用方法时,您还将获得响应对象。
编辑:
如上所述,请尝试在SoapClient上工作:
$client = new SoapClient('http://produktinfo.byggtjeneste.no/ProduktInfo.asmx?WSDL',
array(
'cache_wsdl' => WSDL_CACHE_NONE,
'encoding' => 'utf-8',
'soap_version' => SOAP_1_1,
'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
'trace' => 1
)
);
之后,您需要做的就是调用适当的方法:
$params = new StdClass();
$params->nobbnr = 10871051;
var_dump($client->HentMedierForNobbNo($params));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.