Revive Adserver XML_RPC Отправка графического содержимого

1

Я пытаюсь отправить фотографию через xml_rpc следующим образом:

$data = array(
    'phpads55deb65dd5ca45.43027895',
    'aImage' => array(
        'filename' => $file['aImage']['name'],
        'content' => file_get_contents($file['aImage']['tmp_name']),
    ),
    'campaignId' => 1,
    'storageType' => 'web'
);

$this->client = new Client('http://example.com/api/v2/xmlrpc/');
$this->client->call('ox.addBanner',  $data);

Я получаю запрос через Fiddler, ведьма показывает это:

POST http://example.com/api/v2/xmlrpc/ HTTP/1.1
Host: example.com
Connection: close
Accept-Encoding: gzip, deflate
Content-Type: text/xml; charset=utf-8
Content-Length: 771
Accept: text/xml
User-Agent: Zend_XmlRpc_Client
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
    <methodName>ox.addBanner</methodName>
    <params>
        <param>
            <value>
                <string>phpads55deb65dd5ca45.43027895</string>
            </value>
        </param>
        <param>
            <value>
                <struct>
                    <member><name>campaignId</name><value><int>1</int></value></member> 
                    <member>
                        <name>bannerName</name>
                        <value>
                            <string>khgjjhj</string>
                        </value>
                    </member>
                    <member>
                        <name>aImage</name>
                        <value>
                            <struct>
                                <member>
                                    <name>filename</name>
                                    <value>
                                        <string>logo.png</string>
                                    </value>
                                </member>
                                <member>
                                    <name>content</name>
                                    <value>
                                        <string>�PNG&#13;</string>
                                    </value>
                                </member>
                            </struct>
                        </value>
                    </member>
                    <member>
                        <name>comments</name>
                        <value>
                            <string>dfgdgdfgdfg</string>
                        </value>
                    </member>
                    <member>
                        <name>storageType</name>
                        <value>
                            <string>web</string>
                        </value>
                    </member>
                </struct>
            </value>
        </param>
    </params></methodCall>

И, как вы можете видеть, полного изображения нет в запросе. В чем проблема? Я тестировал fread вместо file_get_content но нет никакой разницы. XML Parser отправляет эту ошибку:

Ошибка XML: недопустимый символ в строке 2

Теги:
image
xml-rpc

2 ответа

0
Лучший ответ

Формат значения неверен. Мне пришлось изменить эту строку

'content' => file_get_contents($file['aImage']['tmp_name']),

в

'content' => new Base64(file_get_contents($file['aImage']['tmp_name'])),

который необходимо импортировать

use Zend\XmlRpc\Value\Base64;
1

Вы не можете вставлять двоичный контент, подобный этому в ответе XML. Вы должны рассмотреть базовую 64, кодирующую двоичное изображение, в строку базы 64. Вы можете сделать так:

$filename = $file['aImage']['tmp_name'];
$data = file_get_contents($filename);
$base64 = base64_encode($fileData);

$data = array(
    'phpads55deb65dd5ca45.43027895',
    'aImage' => array(
        'filename' => $filename,
        'content' => $base64
    ),
    'campaignId' => 1,
    'storageType' => 'web'
);
  • 0
    Я тоже это проверял. Не сработало! Проблема в том, что удаленный сервер не использует base64. А насчет встраивания бинарного контента вы абсолютно правы.
  • 1
    @Abadis Вы имеете в виду, что вы не можете закодировать строку? Или почему это не сработало?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню