soap — PHP soapclient с использованием прокси с аутентификацией и пользовательским заголовком http

Я использую мыльный клиент для подключения к службе wsdl. мыльный клиент использует пользовательский режим аутентификации, который я добавляю в http, следуя коду

$client=new SoapClient(
$wsdl,
array(
'trace' => 1,
"stream_context" => stream_context_create(
array(
"http"=>array(
"header"=>  "username: xmluatbank\r\n".
"password: 123456\r\n")
)
)
);

и заголовок пришел следующим образом.

POST /myweb/Proxy HTTP/1.1
Host: uat.myweb.com:8080
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.4.19
Content-Type: text/xml; charset=utf-8
SOAPAction: ""Content-Length: 1086
username: xmluatbank
password: 123456

до тех пор, пока здесь все было хорошо, затем пришел новый запрос на необходимость подключения через прокси, поэтому я изменил код на следующий:

$client=new SoapClient(
$wsdl,
array(
'trace' => 1,
"stream_context" => stream_context_create(
array(
"http"=>array(
"header"=>  "username: xmluatbank\r\n".
"password: 123456\r\n")
),
'proxy_host' => $proxy,
'proxy_port' => $proxyport,
'proxy_login' => $proxyusrname,
'proxy_password' => $proxypwd,
)
);

и заголовок стал таким:

POST http://uat.myweb.com:8080/ctos/Proxy HTTP/1.1
Host: uat.myweb.com:8080
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.3.9-ZS5.6.0
Content-Type: text/xml; charset=utf-8
SOAPAction: ""Content-Length: 1086
Proxy-Authorization: Basic YWdyb2JhbmtcanVyaXMudnRjbDpBYmNkMTIx==

как вы можете видеть, что контекст потока, который у меня был сейчас, пропал, поэтому теперь я получаю ошибку аутентификации с сервером wsdl. Похоже, прокси перезаписать заголовок http. поэтому я попытался добавить прокси в заголовок http и не использовать мыло прокси

$sLogin = base64_encode("$proxyusername:$proxypwd");
$aHTTP['http']['proxy']           = "$proxy:$proxyprot";
$aHTTP['http']['method']          = 'POST';
$aHTTP['http']['header']          = "User-Agent: My PHP Script\r\n";
$aHTTP['http']['header']         .= "Proxy-Authorization: Basic $sLogin";
$aHTTP['http']['header']         .= "username: xmluatbank\r\n"."password: 1234567\r\n";
$context = stream_context_create($aHTTP);

и назвал мыльный клиент так:

$client=new SoapClient(
$wsdl,
array(
'trace' => 1,
"stream_context" => $context
)
);

но при этом я получаю ошибку мыла и не могу подключиться к прокси.

 SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://uat.myweb.com:8080/ctos/Proxy?wsdl' : failed to load external entity "http://uat.myweb.com:8080/myweb/Proxy?wsdl"

Я не знаю, как решить это. Я перепробовал все что знал, помогите пожалуйста

0

Решение

Я решил проблему следующим кодом, спасибо одному из наших коллег, похоже, проблема в старой версии php на сервере.

if ( PHP_VERSION <5.4 ) {
echo "old_version";
$str_auth_header = "username: xmluatbank\r\n".
"password: 123456";
ini_set('user_agent', 'PHP-SOAP/' . PHP_VERSION . "\r\n" . $str_auth_header);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]