2016-12-16 21 views
16

İzin verilen tek ağ trafiğinin proxy sunucusu aracılığıyla olduğu bir proxy arkasında hem bir PHP SoapClient hem de bir SoapServer (Magento için) çalıştırmayı deniyorum. Bu şekilde müşteri ile çalışanBir proxy'nin arkasındaki PHP SoapServer'ın çalıştırılması

Ben var:

$client = new SoapClient('https://www.domain.co.uk/api/v2_soap/?wsdl=1', [ 
    'soap_version' => SOAP_1_1, 
    'connection_timeout' => 15000, 
    'proxy_host' => '192.168.x.x', 
    'proxy_port' => 'xxxx', 
    'stream_context' => stream_context_create(
     [ 
      'ssl' => [ 
       'proxy' => 'tcp://192.168.x.x:xxxx', 
       'request_fulluri' => true, 
      ], 
      'http' => [ 
       'proxy' => 'tcp://192.168.x.x:xxxx', 
       'request_fulluri' => true, 
      ], 
     ] 
    ), 
]); 

Bu beklendiği gibi çalışır - tüm trafik vekil sunucu üzerinden gidiyor. Bununla birlikte, SoapServer sınıfında, SoapServer üzerinden tüm giden trafiği göndermek için nasıl zorlayacağımı bilemiyorum. http://schemas.xmlsoap.org/soap/encoding/'u doğrudan ağa, proxy aracılığıyla değil, "http://schemas.xmlsoap.org/soap/encoding/" şemasının içe aktarılamıyor "hatasına neden olacak şekilde yüklemeye çalışıyor gibi görünüyor.

Şemas.xmlsoap.org için 127.0.0.1 için bir ana dosya girdisi eklemeye çalışıyorum ve bu dosyayı yerel olarak barındıracağım, ancak yine de aynı sorunu yaşıyorum.

Eksik olduğum bir şey var mı? file_get_contents gibi

cevap

3

deneyin stream_context_set_default: file_get_contents behind a proxy?

<?php 
// Edit the four values below 
$PROXY_HOST = "proxy.example.com"; // Proxy server address 
$PROXY_PORT = "1234"; // Proxy server port 
$PROXY_USER = "LOGIN"; // Username 
$PROXY_PASS = "PASSWORD"; // Password 
// Username and Password are required only if your proxy server needs basic authentication 

$auth = base64_encode("$PROXY_USER:$PROXY_PASS"); 
stream_context_set_default(
array(
    'http' => array(
    'proxy' => "tcp://$PROXY_HOST:$PROXY_PORT", 
    'request_fulluri' => true, 
    'header' => "Proxy-Authorization: Basic $auth" 
    // Remove the 'header' option if proxy authentication is not required 
) 
) 
); 
//Your SoapServer here 

Veya olmayan WSDL modunda sunucuyu çalıştırmayı

<?php 
$server = new SoapServer(null, array('uri' => "http://localhost/namespace")); 
$server->setClass('myClass'); 
$data = file_get_contents('php://input'); 
$server->handle($data); 
İlgili konular