在xml中以编程方式转义与号似乎无效。有效负载切断

问题描述 投票:1回答:1

我有一个arduino板,我正试图从arduino板将xml数据发布到服务器。我在xml中存在&的问题,因此首先我使用浏览器进行了测试。我创建一个html表单,提交数据,在服务器上捕获标头,然后尝试在板上复制它。

html表单。

<form id= "pData" action="#" method="post" > 
    <textarea  name="postData" ></textarea>
    <input type='submit' value=' Go '/> 
</form>

从php服务器捕获数据

if(isset($_POST['postData'])){
    $input_headers="";
    $file = 'xmlErrors.txt';
    foreach ($_SERVER as $name => $value) {
        $input_headers.= "$name: $value\n";
    }

    $settings=$input_headers."\r\n".$_POST['postData'];
    file_put_contents($file,$settings, FILE_APPEND );
}

这是我从董事会发送的方式。然后在串行监视器上打印数据以确保它看起来不错。

String request = "POST /test.php HTTP/1.1\r\nHost: example.com\r\nAccept-Encoding: gzip, deflate \r\nCache-Control:max-age=0\r\nUser-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36\r\nAccept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nAccept-Language:en-US,en;q=0.9,pl;q=0.8\r\nReferer:example.com\r\nContent-Type: application/x-www-form-urlencoded\r\n";
String payload = "<?xml version='1.0' encoding='UTF-8'?><response>a=1&amp;b=2</response>";
//Serial.print("length: ");Serial.println(payload.length());
request += "Content-Length:" + String(payload.length() + 15) + "\r\nConnection: Close\r\n\r\postData=" + payload;
client.print(request);

当我从浏览器进行测试时,数据将被正确捕获。但是当我从董事会发送它时,它在[

被切断
<?xml version='1.0' encoding='UTF-8'?><response>a=1

我尝试更改数据有效负载,例如

<?xml version='1.0' encoding='UTF-8'?><response>a=1&#038;b=2</response>

无论我尝试什么,它都会被切断。而且我几乎匹配了董事会上对我来说有意义的每个http标头,但仍然无济于事。如果不使用&,我将从主板上获取服务器上的全部数据,因此我相信主板上的其余代码都可以完成工作。

任何线索?

php xml server html-escape-characters
1个回答
0
投票

对于那些最终陷入困境的人,这就是发生的事情。

Web浏览器正在使用]提交数据>

CONTENT_TYPE: application/x-www-form-urlencoded

这意味着&变成%26,这就是它通过的方式。在板上,尽管存在标头,但&并未进行urlencode编码,而是转义了xml。将&更改为%26将使您通过$ _POST部分。获取数据后,必须使用&amp;来对&进行xml转义,以使其通过xml解析。

感谢Wireshark:)

© www.soinside.com 2019 - 2024. All rights reserved.