2015-09-25 39 views
0

我试图使用PHP库AS2Secure来接收AS2 MDN。该消息到达并解码得很好,但当响应消失时,它将从Content-Type中去除主“多部分/有符号”值。AS2Secure从头部丢弃多部分/有符号内容类型

举例来说,这样的事情应该是在主标题指定一个多部分消息:

Content-Type: multipart/signed; boundary="----=_Part_8f23d0b4-8a42-4946-9928-4d12d9f7fc66.63"; protocol="application/pkcs7-signature"; micalg=SHA1 

然而,当多部分消息的响应出去,我只看到这个主标题:

Content-Type: text/html; charset=UTF-8 

这会在远程服务器中触发错误,该错误会导致消息将其内容类型指定为multipart。

我跟踪的汽提的多内容类型的AS2MDN.php到这个代码:

// TODO : replace with futur AS2MimePart to separate content from header 
if (strpos($content, "\n\n") !== false) $content = substr($content, strpos($content, "\n\n") + 2); 

如果我删除此代码,缺少Content-Type: multipart/signed线显示了在人体内,但Content-Type: text/html仍显示在页眉。

任何想法?

+0

这是来自合作伙伴系统的MIME头,是否正确?他们可以改变它吗? – Andrew

+0

来自合作伙伴系统的MIME头是'multipart/signed',他们期望得到类似的'multipart/signed'响应。然而,他们从我们的系统获得的多部分消息的响应是'text/html'。这就像是某些东西在输出时覆盖了内容类型的MIME值。 – eComEvo

回答

0

这是由PHP Laravel框架(处理应用程序的路由)在输出过程中覆盖标头造成的。

handle()方法AS2server.php更改此代码:

ob_end_clean(); 
// send headers 
foreach ($mdn->getHeaders() as $key => $value) { 
    $header = str_replace(["\r", "\n", "\r\n"], '', $key . ': ' . $value); 
    header($header); 
} 

// output MDN 
echo $mdn->getContent(); 

...这个Laravel友好代码:

$headers = []; 

foreach ($mdn->getHeaders() as $key => $value) { 
    $headers[str_replace(["\r", "\n", "\r\n"], '', $key)] = str_replace(["\r", "\n", "\r\n"], '', $value); 
} 

return \Response::make($mdn->getContent(), 200, $headers); // Use native Laravel response. 

...问题解决了!