繁体   English   中英

PHP curl Soap请求返回404

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM