Dzisiaj zmierzyłem się z problemem wywoływania usługi SOAP z poziomu PHP działającego na serwerze schowanym za proxy. Ostatecznie okazało się to prostsze niż myślałem, wystarczy przekazać dodatkowe parametry do konstruktora obiektu SoapClient
.
$soap = new SoapClient('http://domena.pl/usluga?wsdl', array( 'proxy_host' => '10.107.10.69', 'proxy_port' => 8080, 'proxy_login' => 'nazwa.uzytkownika', 'proxy_password' => 'haslo' ));
Zabrało mi to jednak trochę czasu bo zacząłem od szukania rozwiązania na niższym poziomie czyli modyfikacji parametrów używanych przez PHP do wykonywania połączeń HTTP. Metodą guglania, prób i błędów dotarłem do takiego rozwiązania, które również działa.
$default = stream_context_get_default(array( 'http' => array( 'proxy' => 'tcp://10.107.10.69:8080', 'request_fulluri' => true, 'header' => 'Proxy-Authorization: Basic ' . base64_encode('nazwa.uzytkownika:haslo'), ) ));
Dzięki tej metodzie z proxy zaczynają współpracować wszystkie funkcje wykorzystujące protokół HTTP, np. readfile()
z plikiem na zdalnym serwerze.
readfile('http://www.google.com/');
Jeden komentarz do “Połączenia HTTP z PHP za serwerem proxy”