最近遇到非常头痛的问题,有人提供了一个webservers的接口,让我把本地的一些数据通过这个接口传递过去。因为本人对这块不了解,因为事情比较紧急,所以也没有太多的时间来仔细研究和学习这块东西,现在需要的是尽快的结束。
我在网上查阅了一些资料,几乎是相同的,而且作用都不大,其中都提到了使用“nusoap.php”这个工具包,可网上很难找到这个工具包,找到的内容且都不同,郁闷。
大虾们,有清楚这块的吗,现在需要的是通过这个接口将本地数据库中的数据传递过去,并且其中还可以传递附件,到底应该怎么去做啊。在线等待!!!
我在网上查阅了一些资料,几乎是相同的,而且作用都不大,其中都提到了使用“nusoap.php”这个工具包,可网上很难找到这个工具包,找到的内容且都不同,郁闷。
大虾们,有清楚这块的吗,现在需要的是通过这个接口将本地数据库中的数据传递过去,并且其中还可以传递附件,到底应该怎么去做啊。在线等待!!!
// Pull in the NuSOAP code
require_once('nusoap.php');
// Create the server instance
$server = new soap_server;
// Register the method to expose
$server->register('hello');
// Define the method as a PHP function
function hello($name) {
return 'Hello, ' . $name;
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
本篇文章来源于 PHP资讯 原文链接:http://www.phpq.net/tutorial/nusoap.html
只要做到遵循HTTP协议通信,就可以。如果选择PHP的话,可以尝试一下Zend_HTTP框架,它是一个使用非常方便的HTTP客户程序框架
手册地址:http://framework.zend.com/manual/zh/zend.http.html
package webservice;public class Article extends webservice.ArticleDb implements java.io.Serializable {
private java.lang.String commendId; public Article() {
} public Article(
java.lang.String articleContent,
java.lang.String articleTitle,
webservice.Attribute[] attr,
java.lang.String createTime,
java.lang.String criticalType,
java.lang.String department,
java.lang.String description,
java.lang.String disableTime,
java.lang.String enableTime,
java.lang.String important,
java.lang.String keyword,
java.lang.String loginName,
java.lang.String modifyTime,
java.lang.String password,
java.lang.String pubshTime,
java.lang.String status,
java.lang.String subType,
java.lang.String type,
java.lang.String webName,
java.lang.String commendId) {
super(
articleContent,
articleTitle,
attr,
createTime,
criticalType,
department,
description,
disableTime,
enableTime,
important,
keyword,
loginName,
modifyTime,
password,
pubshTime,
status,
subType,
type,
webName);
this.commendId = commendId;
}
/**
* Gets the commendId value for this Article.
*
* @return commendId
*/
public java.lang.String getCommendId() {
return commendId;
}
/**
* Sets the commendId value for this Article.
*
* @param commendId
*/
public void setCommendId(java.lang.String commendId) {
this.commendId = commendId;
} private java.lang.Object __equalsCalc = null;
public synchronized boolean equals(java.lang.Object obj) {
if (!(obj instanceof Article)) return false;
Article other = (Article) obj;
if (obj == null) return false;
if (this == obj) return true;
if (__equalsCalc != null) {
return (__equalsCalc == obj);
}
__equalsCalc = obj;
boolean _equals;
_equals = super.equals(obj) &&
((this.commendId==null && other.getCommendId()==null) ||
(this.commendId!=null &&
this.commendId.equals(other.getCommendId())));
__equalsCalc = null;
return _equals;
} private boolean __hashCodeCalc = false;
public synchronized int hashCode() {
if (__hashCodeCalc) {
return 0;
}
__hashCodeCalc = true;
int _hashCode = super.hashCode();
if (getCommendId() != null) {
_hashCode += getCommendId().hashCode();
}
__hashCodeCalc = false;
return _hashCode;
} // Type metadata
private static org.apache.axis.description.TypeDesc typeDesc =
new org.apache.axis.description.TypeDesc(Article.class, true); static {
typeDesc.setXmlType(new javax.xml.namespace.QName("http://webservice", "Article"));
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("commendId");
elemField.setXmlName(new javax.xml.namespace.QName("http://webservice", "commendId"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(true);
typeDesc.addFieldDesc(elemField);
} /**
* Return type metadata object
*/
public static org.apache.axis.description.TypeDesc getTypeDesc() {
return typeDesc;
} /**
* Get Custom Serializer
*/
public static org.apache.axis.encoding.Serializer getSerializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanSerializer(
_javaType, _xmlType, typeDesc);
} /**
* Get Custom Deserializer
*/
public static org.apache.axis.encoding.Deserializer getDeserializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanDeserializer(
_javaType, _xmlType, typeDesc);
}}
先观测HTTP协议的通信内容,
向客户索取协议规范。然后用PHP写个客户端,
有现成的直接用现成的,没有现成的,整个客户端都可以用PHP开发。
如果lz既不理解HTTP协议,对XML又是云里雾里,恐怕开发这个有难度。
<?php
function HttpSoap($server, $port, $url, $namespace, $action, $data) {
$fp = @fsockopen($server, $port);
if (!$fp) {
return FALSE;
} else {
$soapData = ConstructData($namespace, $action, $data);
$length = strlen($soapData);
$out = "POST $url HTTP/1.1\r\n";
$out .= "Host: $server\r\n";
$out .= "Content-Type: text/xml; charset=utf-8\r\n";
$out .= "Content-Length: $length\r\n";
$out .= "SOAPAction: \"$namespace/$action\"\r\n\r\n";
$out .= $soapData;
$out .= "\r\n\r\n";
fputs($fp, $out);
stream_set_timeout($fp, 2);
$header = "";
while($line = trim(fgets($fp))) {
$header .= $line."\n";
}
$dataPos = strpos($header, "Content-Length: ") + 16;
$dataEnd = strpos($header, "\n", $dataPos);
$dataLength = substr($header, $dataPos, $dataEnd - $dataPos);
$data = "";
if($dataLength > 0) {
$data = fread($fp, $dataLength);
}
fclose($fp);
if(strlen($data) != $dataLength || $dataLength <= 0) {
return FALSE;
}
return $data;
}
}
function ConstructData($namespace,$action,$data) {
$soapData = "<?xml version='1.0' encoding='utf-8'?>\r\n";
$soapData .= '<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/">
';
$soapData .= " <soap:Body>\r\n";
$soapData .= " <$action xmlns=\"$namespace\">\r\n";
foreach($data as $name => $value) {
$name = iconv("GBK","UTF-8",$name);
$value= iconv("GBK","UTF-8",$value);
$soapData .= "<$name>$value</$name>\r\n";
}
$soapData .= " </$action>\r\n";
$soapData .= " </soap:Body>\r\n";
$soapData .= "</soap:Envelope>";
return $soapData;
}$data=array(
'username'=>'test',
'pwd'=>'123456'
);
echo HttpSoap($server, $port, $url, $namespace, $action, $data);
?>