如何通过Curl和PHP发送SOAP XML? [英] How can I send SOAP XML via Curl and PHP?

查看:153
本文介绍了如何通过Curl和PHP发送SOAP XML?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这已经让我烦恼了几天;我试图通过Curl发送一个SOAP邮件,但我只是不断得到一个无法连接到主机的错误,但我真的看不到如何。



我有一个ASP版本,与相同的URL和数据正常工作。我认为它只是一个PHP / Curl的东西。



我目前有以下代码( CURLOPT_POSTFIELDS 有效的SOAP信封字符串):

  $ soap_do = curl_init 
curl_setopt($ soap_do,CURLOPT_URL,https://xxx.yyy.com:517/zzz.asmx);
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:Envelope> ...< / soap:Envelope>');
curl_setopt($ soap_do,CURLOPT_HTTPHEADER,array('Content-Type:text / xml; charset = utf-8','Content-Length:'.strlen('< soap:Envelope& / soap:Envelope>')));

if(curl_exec($ soap_do)=== false)
{
$ err ='Curl error:'。 curl_error($ soap_do);
curl_close($ soap_do);
return $ err;
}
else
{
curl_close($ SOAP_do);
return'操作完成没有任何错误';
}

那么任何想法为什么它只是一直错误?



ASP版本运行正常!代码是:

 设置xmlhttp = server.Createobject(MSXML2.ServerXMLHTTP)
xmlhttp.OpenPOST ,https://xxx.yyy.com:517/zzz.asmx
xmlhttp.setRequestHeaderContent-Type,text / xml; charset = utf-8
xmlhttp.Send ('< soap:Envelope> ...< / soap:Envelope>')


Thanx很多好友,你的代码对我有用。



这里是代码:

  $ soap_do = curl_init(); 
curl_setopt($ soap_do,CURLOPT_URL,$ url);
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,$ post_string);
curl_setopt($ soap_do,CURLOPT_HTTPHEADER,array('Content-Type:text / xml; charset = utf-8','Content-Length:'.strlen($ post_string)))
curl_setopt($ soap_do,CURLOPT_USERPWD,$ user。:。$ password);

$ result = curl_exec($ soap_do);
$ err = curl_error($ soap_do);


This has been bugging me for days; I'm trying to send a SOAP post via Curl but I just keep getting a "couldn't connect to host" error, but, I really can't see how.

I have an ASP version which works fine with the same URL and data. I think it's just a PHP/Curl thing.

I currently have the following code (the CURLOPT_POSTFIELDS data is a valid SOAP envelope string):

$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL,            "https://xxx.yyy.com:517/zzz.asmx" );
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:Envelope>...</soap:Envelope>'); 
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     array('Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen('<soap:Envelope>...</soap:Envelope>') ));

if(curl_exec($soap_do) === false)
{                
    $err = 'Curl error: ' . curl_error($soap_do);
    curl_close($soap_do);
    return $err;
}
else
{
    curl_close($soap_do); 
    return 'Operation completed without any errors';
}

So any ideas why it just errors all the time?

The ASP version works fine! The code is:

Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "POST","https://xxx.yyy.com:517/zzz.asmx"
xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
xmlhttp.Send('<soap:Envelope>...</soap:Envelope>')

解决方案

Thanx a lot buddy, your code has worked for me.

Here is the code:

$soap_do = curl_init(); 
curl_setopt($soap_do, CURLOPT_URL,            $url );   
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,    $post_string); 
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     array('Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen($post_string) )); 
curl_setopt($soap_do, CURLOPT_USERPWD, $user . ":" . $password);

$result = curl_exec($soap_do);
$err = curl_error($soap_do);  

这篇关于如何通过Curl和PHP发送SOAP XML?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆