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 ?
Hier nochmal die Rückmeldung des Arduinos:
connecting...
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.
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