Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
[PHP] SOAP(nuSOAP) как создать пакет с header ?
|
|||
|---|---|---|---|
|
#18+
работаю с сервисом SOAP, он с авторизацией - надо залогиниться, получить значение сессии, которое потом прикладывать к каждому запросу(конверту) SOAP. Вот описание пакета авторизации: POST Client.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "Logon" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=" http://www.w3.org/2001/XMLSchema" xmlns:soap=" http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Logon xmlns="Client"> <Login>string</Login> <Password>string</Password> </Logon> </soap:Body> </soap:Envelope> Залогиниться у меня получается, вот запрос: Код: php 1. 2. 3. 4. создаётся конверт: RequestPOST Client.asmx HTTP/1.0 Host: localhost User-Agent: NuSOAP/0.9.5 (1.123) Content-Type: text/xml; charset=ISO-8859-1 SOAPAction: "Client/Logon" Content-Length: 558 <?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=" http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd=" http://www.w3.org/2001/XMLSchema" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC=" http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns7786=" http://tempuri.org"><SOAP-ENV:Body><Logon xmlns="Client"><Login>Admin</Login><Password>12345</Password></Logon></SOAP-ENV:Body></SOAP-ENV:Envelope> получаем ответ в котором всё ОК и есть нужный нам Session , через регулярные выражения запихнул его в переменную $Session и делаю следующий запрос: Код: php 1. Но получаю Fault, и сформированный пакет просто не содержит сессию. Я подозреваю, что ошибка заключается в создании запроса, ибо вот описание пакета GetUsers: POST Client.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "Client/GetUsers" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=" http://www.w3.org/2001/XMLSchema" xmlns:soap=" http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <SecurityHeader xmlns="Client"> <Session>session</Session> </SecurityHeader> </soap:Header> <soap:Body> <GetOperators xmlns="Client" /> </soap:Body> </soap:Envelope> Здесь session в блоке Header, а не в Body. Я подозреваю, что как то иначе надо передавать переменные туда, но вот как - не выходит вообще. Хотя может вообще не в этом дело. Подскажите, пожалуйста как запрос создать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 15:19 |
|
||
|
[PHP] SOAP(nuSOAP) как создать пакет с header ?
|
|||
|---|---|---|---|
|
#18+
отчасти разобрался, перед вызовом GetUsers делаем отправку заголовков отдельной командой: Код: php 1. а потом делаю: Код: php 1. вижу что в сформированном пакете теперь есть header и в нём есть передаваемая сессия. Но, к сожалению, всё равно что то не так....получаю ответ "Нет сессии авторизованного пользователя". Есть у меня подозрение теперь, что надо как то вот так: Код: php 1. Ибо я в пакете-запросе не видел "SecurityHeader", там начинался блок header и сразу шла передача <Session> без <Security header но проверить пока не могу :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2013, 17:24 |
|
||
|
[PHP] SOAP(nuSOAP) как создать пакет с header ?
|
|||
|---|---|---|---|
|
#18+
незнаю как в nusoap, в стандартной реализации имеются специальные объекты для генерации заголовков в тело конверта http://us1.php.net/manual/ru/class.soapheader.php экземпляры которого вставляются в сам запрос http://us1.php.net/manual/ru/soapclient.soapcall.php в момент обращения конверт получается с заголовком. Кроме данных в заголовке должны быть и служебные флаги, определение пространства имен и тд, все это есть в спецификации протокола. Ели у вас имеется стандартное расширение SOAP, то наверное лучше перейти на него, тем более у подавляющего большинства хостеров это расширение имеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2013, 19:02 |
|
||
|
[PHP] SOAP(nuSOAP) как создать пакет с header ?
|
|||
|---|---|---|---|
|
#18+
sxq, у меня всё локально на Denwer. Когда появилась задача работы с SOAP подключил php_soap.dll в php.ini, в phpinfo выдает что Soap подключен и всё ок. Но я так и не смог через стандартный soap даже авторизоваться, а через nuSOAP пошло всё в лёт ;) Если не получится добиться с nuSOAP то вернусь к стандартному и буду мучать уже его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2013, 19:21 |
|
||
|
[PHP] SOAP(nuSOAP) как создать пакет с header ?
|
|||
|---|---|---|---|
|
#18+
для начала вам следует изучить спецификацию конверта (она может быть в 2-х версиях, хотя сам заголовок не сильно отличается), судя по всему ваш заголовок вне стандарта, поэтому и не работает. например, <SecurityHeader xmlns="Client"> xmlns должен быть в виде URL, а не просто строка. Вы якобы создаете параметр "<Session>$session</Session>", вы уверены что имя параметра Session? и он верно обрабатывается на стороне сервера? Скорее всего у вас пропущен в заголовке имя метода/функции которая должна обработать ваш заголовок. Вы описали заголовок в теле конверта в описателе WSDL? (хотя это не влияет на работу) Сам заголовок по сути тоже самое что и тело, там так же задаются имена функций/методов и параметры к ним, только он выделен в отдельный блок. Стандартная реализация работает нормально, хотя имеются ошибки, но не критичные, и работать будет быстрее чем эмуляция написанная на самом PHP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2013, 19:51 |
|
||
|
[PHP] SOAP(nuSOAP) как создать пакет с header ?
|
|||
|---|---|---|---|
|
#18+
Спасибо большое за ответы. У меня всё получилось. Вот только теперь вопрос возник: при выводе Код: php 1. у меня все русские символы печатаются ???? (символами вопроса) а вывожу Response вот так: Код: php 1. эти же русские символы выводятся кириллицей. Пытался сделать вот так: Код: php 1. 2. 3. не помогло :( как бы сделать что бы в массиве result тоже были русские символы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 11:04 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38458821&tid=1463291]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 366ms |

| 0 / 0 |
