简介:
有没有办法强制PHP内置的SoapClient类通过HTTPS连接到具有无效证书的服务器?
我为什么要那样做?
我在没有DNS条目或证书的服务器上部署了一个新的应用程序.我想在设置DNS条目和修复证书之前尝试使用SoapClient连接它,最合理的方法是让客户端在测试期间忽略证书.
我不是意识到这是一个巨大的安全隐患吗?
这仅用于测试.当服务投入生产时,将会有一个有效的证书,客户端将被强制验证它.
我通过java代码调用HTTPS SOAP Web服务.我已经在jre cacerts密钥库中导入了自签名证书.现在我得到:
com.sun.xml.internal.ws.com.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
Run Code Online (Sandbox Code Playgroud)
服务URL的主机名与cert中提供的CN的主机名不匹配.我在这里阅读了有关定义自定义主机名验证程序的解决方法.但我无法在我的代码中实现解决方法的位置.
public SOAPMessage invokeWS(WSBean bean) throws Exception {
SOAPMessage response=null;
try{
/** Create a service and add at least one port to it. **/
String targetNameSpace = bean.getTargetNameSpace();
String endpointUrl = bean.getEndpointUrl();
QName serviceName = new QName(targetNameSpace, bean.getServiceName());
QName portName = new QName(targetNameSpace, bean.getPortName());
String SOAPAction = bean.getSOAPAction();
HashMap<String, String> map = bean.getParameters();
Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointUrl);
/** Create a …Run Code Online (Sandbox Code Playgroud) WCF与REST和SOAP之间有什么关系?WCF是基于这些技术之一(REST还是SOAP)还是单独的技术?
我正在使用内存有限的机器,我想以流方式将动态生成的(非磁盘)文件上传到S3.换句话说,我在开始上传时不知道文件大小,但最后我会知道它.通常,PUT请求具有Content-Length标头,但是可能有一种解决方法,例如使用multipart或chunked content-type.
S3可以支持流式上传.例如,请看这里:
http://blog.odonnell.nu/posts/streaming-uploads-s3-python-and-poster/
我的问题是,我可以完成同样的事情,而无需在上传开始时指定文件长度吗?
使用JSON接收和发送数据是通过简单的HTTP请求完成的.而在SOAP中,我们需要处理很多事情.解析XML有时也很难.甚至Facebook在Graph API中使用JSON.我仍然想知道为什么还应该使用SOAP?是否有任何理由或领域SOAP仍然是更好的选择?(尽管有数据格式)
此外,在简单的客户端 - 服务器应用程序(如与服务器连接的移动应用程序)中,SOAP可以提供优于JSON的任何优势吗?
如果有人能够考虑我提供的信息(如果有的话),可以在JSON和SOAP之间争取主要/突出的差异,我将非常感激.
我需要调试使用soap客户端的代码.我在php.net中找到了getLast*方法,但是当我尝试获取最后一次调试请求时,它返回NULL
<?php
$client = new SoapClient("http://www.webservicex.net/ConverPower.asmx?WSDL");
$response = $client->ChangePowerUnit(array(
"PowerValue" => 100,
"fromPowerUnit" => "horsepower",
"toPowerUnit" => "megawatts"
));
echo "====== REQUEST HEADERS =====" . PHP_EOL;
var_dump($client->__getLastRequestHeaders());
echo "========= REQUEST ==========" . PHP_EOL;
var_dump($client->__getLastRequest());
echo "========= RESPONSE =========" . PHP_EOL;
var_dump($response);
?>
Run Code Online (Sandbox Code Playgroud)
代码执行的结果:
$php soap_test.php
====== REQUEST HEADERS =====
NULL
========= REQUEST ==========
NULL
========= RESPONSE =========
object(stdClass)#2 (1) {
["ChangePowerUnitResult"]=>
float(0.0746)
}
Run Code Online (Sandbox Code Playgroud)
如何获取最后一个SoapClient请求的正文和标题的内容?
我正在尝试编写一个简单的c#控制台应用程序来测试SOAP API:https: //www.imailtest.co.uk/webservice/imail_api.asmx?wsdl(或https://www.imailtest.co.uk /webservice/imail_api.asmx查看api方法)
所以,我添加了这个引用,并尝试在其上调用2个api方法(Authentiacate和ProcessPrintReadyPDF)调用并得到此错误:
错误:无法加载合同"ServiceReference1.imail_ apiSoap"的端点配置部分,因为找到了合同中的多个端点配置.请按名称指明首选端点配置部分.
这是我的C#代码:
static void Main(string[] args)
{
// Anticipate Error
try
{
// Generate SOAP Client
ServiceReference1.imail_apiSoapClient soapClient = new ServiceReference1.imail_apiSoapClient();
// Login
Console.WriteLine("Authenticating");
soapClient.Authenticate(iMailUser, iMailPass);
// Proceed If PDF File Exists
if (File.Exists(PDFFile))
{
// Upload PDF File To iMail
Console.WriteLine("Uploading PDF File");
soapClient.ProcessPrintReadyPDF(File.ReadAllBytes(PDFFile), "", true);
// Test Complete
Console.WriteLine("Done");
}
else
{
// Log Error
Console.WriteLine("PDF File [{0}] Does Not Exists", PDFFile);
}
}
catch (Exception ex) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Spring编写SOAP服务,但是我收到了依赖注入问题.我@Autowired通过服务使用这样的问题:
public interface UserDao {
User getUser(String username);
}
Run Code Online (Sandbox Code Playgroud)
Dao的实施如下:
@Controller("userDao")
public class UserDaoImpl implements UserDao {
private static Log log = LogFactory.getLog(UserDaoImpl.class);
@Autowired
@Qualifier("sessionFactory")
private LocalSessionFactoryBean sessionFactory;
@Override
public User getUser(String username) {
Session session = sessionFactory.getObject().openSession();
// Criteria query = session.createCriteria(Student.class);
Query query = session
.createQuery("from User where username = :username");
query.setParameter("username", username);
try {
System.out.println("\n Load Student by ID query is running...");
/*
* query.add(Restrictions.like("id", "%" + id + "%",
* MatchMode.ANYWHERE)); return (Student) query.list(); …Run Code Online (Sandbox Code Playgroud) 考虑这个示例SOAP客户端脚本:
$SOAP = new SoapClient($WDSL); // Create a SOAP Client from a WSDL
// Build an array of data to send in the request.
$Data = array('Something'=>'Some String','SomeNumber'=>22);
$Response = $SOAP->DoRemoteFunction($Data); // Send the request.
Run Code Online (Sandbox Code Playgroud)
在最后一行,PHP从您指定的数组中获取参数,并使用WSDL构建要发送的XML请求,然后发送它.
我怎样才能让PHP向我展示它构建的实际XML?
我正在对应用程序进行故障排除,需要查看请求的实际XML.
我一直在网上阅读以获得两个词的确切含义:
代表国家
我有个疑问.我误解了这些条款.我想澄清一些人如何对此有所了解.
我的理解是,服务器中有一个资源.SO Rest表示将此资源的某些表示状态转移到客户端.
如果服务器有资源x,那么如果我们可以创建资源x的表示状态y,并通过Web传输它就是REST的意思,这是正确的还是它的正确含义.有人可以解释一下这个.