2012-11-04 78 views
0

我有以下的Arduino代碼。它連接到服務器並將傳感器的讀數發送給它。來自服務器的應答總是:Arduino以太網盾:: HTTP/1.1 400錯誤請求

HTTP/1.1 400錯誤的請求

Arduino的代碼如下。

#include <Ethernet.h>   //Library for Ethernet functions 
#include <Client.h>    //Library for client functions 
#include <OneWire.h>   //Library for the onewire bus 
#include <SPI.h> 

// Ethernet settings 
uint8_t hwaddr[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xBA, 0xBE}; // MAC address of Arduino 
uint8_t ipaddr[4] = {192, 168, 0, 55};     // IP address of Arduino 
uint8_t gwaddr[4] = {192, 168, 0, 1};     // IP address of gateway (for later DNS implementation) 
uint8_t subnet[4] = {255, 255, 255, 0};     // Subnet mask   (for later DNS implementation) 
uint8_t serverip[4] = {192, 168, 0, 54};     // IP address of server arduino sends data to 

uint8_t serverport = 80;         // The port the Arduino talks to 

EthernetClient client;   // Make a new instance from type "Client" named "client", giving it 
int numSensors;     // a variable to store the number of sensors. 

bool connected = false;   // Yes-no variable (boolean) to store if the arduino is connected to the server. 
int i = 0;      // Variable to count the sendings to the server. 

void setup() { 
    Serial.begin(9600);          // Start the serial port 
    Serial.println("Initializing Ethernet."); 
    Ethernet. begin(hwaddr, ipaddr);       // Start up Ethernet 
} 

void loop() { 
    if(!connected) {          // If "not" connected print: not connected ;) 
     Serial.println("Not connected"); 
     Serial.println("Connecting to server..."); 
     if (client.connect(serverip, serverport)) {   // If connected, set variable connected to "true" and 
      connected = true; 
      Serial.println("connected!!"); 
      String data; 
      data+=""; 
      data+="t0="; 
      data+=analogRead(A0); 
      // data+="&&"; 
      // data+="t1="; 
      // data+=analogRead(A1); 
      // data+="&&"; 
      // data+="t2="; 
      // data+=analogRead(A2); 
      Serial.println("Sending to Server: "); 
      Serial.println(); 
      client.print("GET /formSubmit.php?" + data); 
      Serial.print("GET /formSubmit.php?" + data); 
      client.println(" HTTP/1.1"); 
      Serial.println(" HTTP/1.1"); 
      client.println("Host: http://localhost/PhpProject1"); 
      Serial.println("Host: http://localhost/PhpProject1"); 
      client.println("User-Agent: Arduino"); 
      Serial.println("User-Agent: Arduino"); 
      client.print("Content-Length: "); 
      Serial.print("Content-Length: "); 
      client.println(data.length()); 
      Serial.println(data.length()); 
      client.println("Accept: text/html"); 
      Serial.println("Accept: text/html"); 
      client.println("Connection: close"); 
      Serial.println("Connection: close"); 

      client.println(); 
      Serial.println(); 

      if (client.available()) { 
       char c = client.read(); 
       Serial.print(c); 
      } 
      delay(10000); 
     } 
     else { 
      Serial.println("Cannot connect to Server");  // else block if the server connection fails (debugging) 
     }              
    }               
    else {              
     delay(500);           // 
     while (client.connected() && client.available()) { // When connected and availabe: 
      char c = client.read();       // read the answer of the server and 
      Serial.print(c);         // print it to serial port 
     } 
     // 
     Serial.println();          // 
     client.stop();          // Stop the connection and set 
     connected = false;         // "connected" to false 
    } 
} 

上傳這個代碼後的串行顯示器上的輸出是:

Initializing Ethernet. 
Not connected 

Connecting to server... 
connected!! 

Sending to Server: 

GET /formSubmit.php?t0=433 HTTP/1.0 
Host: http://localhost/PhpProject1 
User-Agent: Arduino 
Content-Length: 6 
Accept: text/html 
Connection: close 



HTTP/1.1 400 Bad Request 
Date: Sat, 03 Nov 2012 17:06:00 GMT 
Server: Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 
Content-Length: 343 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>400 Bad Request</title> 
</head><body> 
<h1>Bad Request</h1> 
<p>Your browser sent a request that this server could not understand.<br /> 
</p> 
<hr> 
<address>Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 Server at http://localhost/PhpProject1 Port 80</address> 
</body></html> 

可能是什麼問題?

回答

4

您要求不好。

  1. Host場不得含有/,請嘗試:Host: localhost
  2. Content-Length毫無意義的GET方法
  3. 也許你需要通過\r\n,而不是僅僅\n終止每一行(取決於服務器)
+0

謝謝,它現在工作正常 – Ahmad