Revive Adserver XML_RPC 正在发送图像内容

Revive Adserver XML_RPC Sending Image Content

我正在尝试通过 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 解析器发送此错误:

XML error: Invalid character at line 2

您不能在 XML 响应中嵌入二进制内容。您应该考虑使用 base 64 将二进制图像编码为 base 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'
);

值格式不正确。我不得不改变这一行

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

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

需要导入这个

use Zend\XmlRpc\Value\Base64;