Mit Arduino Ethernetshield Yahoo Wetter API auslesen. Error 400

Guten Tag,

und zwar möchte ich mit meinem arduino+ethernetshield Wetterdaten von Yahoo abfragen.
Dazu hab ich erstmal den folgenden Beispielcode angepasst:

/*
  DNS and DHCP-based Web client

 This sketch connects to a website (http://www.google.com)
 using an Arduino Wiznet Ethernet shield. 

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe, based on work by Adrian McEwen

 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
// Änderung 1 
char serverName[] = "weather.yahooapis.com";

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    while(true);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:

  if (client.connect(serverName, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    // Änderung 2
    client.println("GET /forecastrss?w=12835174&u=c HTTP/1.0");
    client.println();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // if there are incoming bytes available 
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    while(true);
  }
}

Wenn ich nun den Sketch laufen lasse kommt auch durchaus eine Verbindung zustande, allerdings muss ich wohl noch eine Browsererkennung oder ähnliches als Header einfügen. Nun ist die Frage wie geht das ? :smiley:

Hier nochmal die Rückmeldung des Arduinos:

connecting…
connected
HTTP/1.0 400 Host Header Required
Date: Sun, 06 Oct 2013 08:59:14 GMT
Connection: close
Server: YTS/1.20.13
Cache-Control: no-store
Content-Type: text/html
Content-Language: en
Content-Length: 419

Host Header Required Your browser did not send a "Host:" HTTP header, so the virtual host being requested could not be determined. To access this site you will need to upgrade to a modern browser that supports the HTTP "Host:" header field.

Oklox: Wenn ich nun den Sketch laufen lasse kommt auch durchaus eine Verbindung zustande, allerdings muss ich wohl noch eine Browsererkennung oder ähnliches als Header einfügen. Nun ist die Frage wie geht das ? :D

Das HTTP-Übertragungsprotokoll ist nicht so ganz Deine Stärke, oder? :roll_eyes:

    client.println("GET /forecastrss?w=12835174&u=c HTTP/1.0");
    client.print("Host: ");client.println(serverName);  // Diese Zeile fehlt bei Deiner Anfrage!
    client.println();

Da stand doch offenbar die Fehlermeldung sogar im Klartext dabei: Your browser did not send a "Host:" HTTP header, so the virtual host being requested could not be determined.

Wenn man so eine Meldung sieht, dann fügt man doch als erstes den fehlenden Host-Header ein, oder ist das nicht das naheliegendste?

Ohman. Du hast natürlich Recht...

Vielen Dank!