我有一個 arduino 板,我試圖從中將 xml 數(shù)據(jù)發(fā)布到服務(wù)器。我在 xml 中遇到 & 問題,所以首先我使用瀏覽器進行了測試。我創(chuàng)建了一個 html 表單,提交數(shù)據(jù),在服務(wù)器上捕獲標(biāo)頭,然后嘗試在板上復(fù)制它。html 格式。<form id= "pData" action="#" method="post" > <textarea name="postData" ></textarea> <input type='submit' value=' Go '/> </form>從 php 服務(wù)器捕獲數(shù)據(jù)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 );}這就是我從董事會發(fā)送它的方式。我在串行監(jiān)視器上打印數(shù)據(jù)以確保它看起來不錯。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&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);當(dāng)我從瀏覽器測試它時,數(shù)據(jù)被正確捕獲。但是當(dāng)我從董事會發(fā)送它時,它被切斷了<?xml version='1.0' encoding='UTF-8'?><response>a=1我嘗試像這樣更改數(shù)據(jù)有效負載<?xml version='1.0' encoding='UTF-8'?><response>a=1&b=2</response>無論我嘗試什么,它都會被切斷。我?guī)缀跗ヅ淞硕聲袑ξ矣幸饬x的每個 http 標(biāo)頭,但仍然無濟于事。如果沒有 &,我會從板上獲取服務(wù)器上的全部數(shù)據(jù),所以我相信板上的其余代碼正在完成它的工作。有什么線索嗎?
1 回答

繁華開滿天機
TA貢獻1816條經(jīng)驗 獲得超4個贊
對于那些最終陷入這個問題角落的人來說,這就是發(fā)生的事情。
Web 瀏覽器正在提交數(shù)據(jù)
CONTENT_TYPE: application/x-www-form-urlencoded
這意味著 & 變成了 %26,這就是它通過的方式。在板上,雖然標(biāo)頭存在,但 & 未進行 urlencoded,而是轉(zhuǎn)義了 xml。將 & 更改為 %26 將使您完成 $_POST 部分。獲取數(shù)據(jù)后,您必須對 & 進行 xml 轉(zhuǎn)義,&
以使其通過 xml 解析。
感謝 Wireshark :)
- 1 回答
- 0 關(guān)注
- 110 瀏覽
添加回答
舉報
0/150
提交
取消