我正在運行一個程序,該程序使用POST請求向PHP頁面報告有關泵運行時間和放大器到服務器的數據。該系統在幾個Arduino Pro Minis上運行良好。我正在使用328和Arduino Uno引導程序構建的電路板上進行測試,以及4個不同的POST請求,兩個工作和兩個失敗。如何解決400錯誤請求
我相信這是由Arduino糟糕地形成POST請求引起的,但是我無法驗證這一點,因爲Arduino Serial.prints是正確的字符串。如果我手動硬編碼字符串,它也可以。
我形成數據是這樣的:
byte runtime = analogRead(A3); // generates random data
float amps = analogRead(A2)/100;
char cruntime[4]; // create char array for runtime
char camps[5];
dtostrf(runtime, 4, 0, cruntime);
dtostrf(amps, 2, 1, camps);
String sruntime = String(cruntime);
sruntime.trim();
String samps = String(camps);
samps.trim();
String cwpdata = "serial=test&runtime=" + sruntime + "&s=" + samps; // posted to server
我已經檢查我的錯誤的服務器,但無法找到的這些記錄。無論如何,我可以看到每次發佈的內容,所以我可以看到請求未正確形成的位置?
這裏是Arduino的代碼發佈數據:
void postData(String inputData, String filename) {
if (client.connect(server, 80)) {
Serial.println("connected");
// Make a HTTP request:
client.println("POST /dev/telemetry/test/" + filename + ".php HTTP/1.1");
client.println("Host: www.SERVER.com"); // changed for privacy
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(inputData.length());
Serial.println(inputData);
Serial.print("Data Length: ");
Serial.println(inputData.length());
client.println("Connection: close");
client.println();
client.println(inputData);
client.println();
} // close if client
wdt_reset();
unsigned long startMillis = millis();
unsigned long endMillis = startMillis + timeout;
while(client.connected() && (millis() < endMillis)) {
wdt_reset();
while(client.available()) {
char ch = client.read();
Serial.print(ch);
wdt_reset();
}
}
// if the server's disconnected, stop the client:
Serial.println();
client.stop();
int memory = freeMemory();
if (memory < 125) {
delay(15000);
}
}
服務器上應該有一個error.log文件。 –
我查看了所有發現的錯誤日誌,但沒有看到它。我會再看看。 – pekasus
我再次查看了該文件夾中的所有錯誤日誌以及上面的文件夾,結果什麼都沒發現。我查看了原始服務器日誌,並沒有顯示400。 – pekasus