Zend_Soap_Client özel user-agent ayarlayabilir miyim?

1 Cevap php

Ben Zend_Soap_Server var. Bu test edilmelidir. Bir sorun - birim test ve geliştirme modları farklı veritabanları ile çalışması gerekir. . Bu htaccess ile yapılabilir:

SetEnvIfNoCase User-Agent (.*) APPLICATION_ENV=development
SetEnvIfNoCase User-Agent testing APPLICATION_ENV=testing

It would work fine for me, I use Zend_Soap_Client as is for development/production mode, and add extra parameter for testing. There are no special changes in source code for testing support. The issue - I can't set custom user-agent for (Zend_Soap_Client It seems as this parameter isn't supported or isn't documented. I tried to do the same thing via mod_rewrite and adding

new Zend_Soap_Client('...?wsdl&testing');

ama aksi sabun-eylemler wsdl dışında 'test' ile yansıtılmaz, test query_string destek Zend_Soap_Server değiştirmek gerekir. Benim görüşüme göre iyi değil.

Ben (ben böyle $server->setClass('classWS') gibi sınıflar için testler var) biraz daha kabul testleri, değil ünite ile ilgili katılıyorum, ama yine de, ben ne olursa olsun terminoloji gerek.

Peki, benim için iyi çalışacak gibi bir şeydir:

new Zend_Soap_Client($wsdl, array('useragent' => 'testing'));

testlerde.

1 Cevap

Bu mümkün ama biraz daha karmaşık, sadece bir ayar seçeneği daha bulunuyor. Anahtar stream context olduğunu. Gerekli işlevi stream_context_create() - please also have a look at "HTTP context options".

$context = stream_context_create(array(
    'http' => array(
        'user_agent' => 'testing'
    )
);
$client = new Zend_Soap_Client($wsdl, array('stream_context' => $context));

// or set option after instatiation
$client->setStreamContext($context);

EDIT:

Akımı bağlamı user-agent geçersiz almak gibi görünüyor başka bir seçenek SoapClient itself. But this is a little bit more complicated as this option is not exposed by Zend_Soap_Client ve user_agent seçeneğini kullanmaktır.

$client = new Zend_Soap_Client($wsdl);
$options = array_merge($client->getOptions(), array(
    'trace'      => true,
    'user_agent' => 'testing'
));
$soapClient = new Zend_Soap_Client_Common(array($client, '_doRequest'), $wsdl, $options);
$client->setSoapClient($soapClient);

Yukarıdaki kod Zend_Soap_Client::_initSoapClientObject() hangi varsayılan SoapClient hiçbir özel nesnesi kayıtlı olduğunda başlatır olur ne daha fazla ya da daha az bir özetidir.