java php webservice的一个问题

目前和java的做WebService
对方给了一个公网地址,打开后
对方的webservice 描述里面最下面是个内网域名,我用PHP请求他们的公网地址,直接没响应
用他们java的demo直接可以请求
请问怎么解决这个问题

我的代码如下

include_once("lib/nusoap.php");
$enc_data = 'test';
$client = new nusoap_client("http://公.网.I.P:8080/abmediadev/services/outWebService?wsdl",true); //访问的WebService地址
$client->debug_flag=true;
$return = $client->call('handleRequest', array('args0' => $enc_data)); //发送请求
if ($client->fault) {
    echo 'Fault'. print_r($return);
} else {
    // Check for errors
    $err = $client->getError();
    if ($err) {
        // Display the error
        echo 'Error'. $err;
    } else {
        // Display the result
        echo 'Result' . print_r($return);
    }
}
print_r($return); //输出返回结果
var_dump($client->getError()); //显示错误`

代码执行完返回如下

HTTP Error: Couldn't open socket connection to server http://10.4.16.203/services/outWebService.outWebServiceHttpSoap11Endpoint/, Error (110): Connection timed out

以下是webservice最下面的内容
<wsdl:port name="outWebServiceHttpEndpoint" binding="ns:outWebServiceHttpBinding">
<soap:address location="http://10.4.16.203/services/outWebService.outWebServiceHttpEndpoint/"/>
</wsdl:port>

我的代码里 是直接请求的他们的公网地址,现在直接返回内网ip 超时的错误,是不是他们公网帮我转发到内网导致的,还是PHP直接拿到了soap:address然后直接请求的内网,不太了解nusoap的执行原理。
对方说其他客户用php可以连他们,我有点怀疑我学的是不是盗版的PHP,哈哈

阅读 3.2k
1 个回答

已解决

function curl($url, $xml) {
        
           $xml_post_string = <<<xml
            <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ser="http://service.mediation.ab.com">
               <soap:Header/>
               <soap:Body>
                  <ser:handleRequest>
                     <!--Optional:-->
                     <ser:args0>$xml</ser:args0>
                  </ser:handleRequest>
               </soap:Body>
            </soap:Envelope>
xml;
        $headers = array(
            "Content-type: application/soap+xml;charset=GBK;"
        );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
        $response = curl_exec($ch);
        if ($no = curl_errno($ch)) {
            $error = curl_error($ch);
            curl_close($ch);
            throw new RequestException(__METHOD__ . ' 请求失败:' . $error, $no);
        }
        curl_close($ch);
        
        return $response;
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题