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 </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;
我正在尝试通过 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 </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;