Arduino ethernet shield - Problem

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11142
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Arduino ethernet shield - Problem

Inlägg av GeekJoan »

Håller på med en display som ska plocka div info från nätet och visa på en display.

Kastade upp en testfil på min hemsida som den skulle gå och hämta.

Kod: Markera allt

...
char server[] = "www.geekjoan.com";
...
client.println("GET /ardtest.php HTTP/1.1");
client.println("Host: www.geekjoan.com");
..

Koden i sin helhet(standard exempel WebClient):

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

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.geekjoan.com";   
IPAddress ip(192,168,0,177);
EthernetClient client;

void setup() {
  Serial.begin(9600);
   while (!Serial) {
    ; 
  }

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
  delay(1000);
  Serial.println("connecting...");
  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /ardtest.php HTTP/1.1");
    client.println("Host: www.geekjoan.com");
    client.println("Connection: close");
    client.println();
  } 
  else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    while(true);
  }
}
Problemet är att min domän ligger ju som/på virtuel hosting och här stöter jag på problemet.

Serial Monitor:

connecting...
connected
HTTP/1.1 301 Moved Permanently
Date: Thu, 08 Jan 2015 22:26:17 GMT
Server: Apache/2.2.22 (Debian)
Location: http://geekjoan.com/ardtest.php
Content-Length: 321
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://geekjoan.com/ardtest.php">here</a>.</p>
<hr>
<address>Apache/2.2.22 (Debian) Server at http://www.geekjoan.com Port 80</address>
</body></html>

disconnecting.



Om jag gör anropet till google som i original exemplet är så funkar det fint.

Först hade jag tagit bort HTTP/1.1 ur raden client.println("GET /ardtest.php HTTP/1.1");
Detta för att inte få med headers etc, utan bara få det som faktiskt kommer upp på skärmen om man går till den sidan.
Detta trodde webhosting stället ställde till det för att då såg dom att det blev HTTP/1.0 och servern kräver 1.1.
Så frågan är om arduinon ändra detta till 1.1 när jag skriver 1.1 bakom som ovan? Eller kör den på med 1.0 i alla fall? Hur kan man ta reda på detta? Att ändra till 1.1 hjälpte inte, och det hjälper ju inte heller till eftersom jag inte vill ha med headern.

Kan jag komma runt detta på något sätt eller finns det någon webbaserad gratisservice man kan använda sig av för detta ändamål?
Helst vill jag ju använda min "egna" server om det går.
Användarvisningsbild
mrfrenzy
Co Admin
Inlägg: 15460
Blev medlem: 16 april 2006, 17:04:10

Re: Arduino ethernet shield - Problem

Inlägg av mrfrenzy »

Ändra host från www.geekjoan.com till geekjoan.com
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11142
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino ethernet shield - Problem

Inlägg av GeekJoan »

:) Ja, då funkar det mycket bättre.

connecting...
connected
HTTP/1.1 200 OK
Date: Thu, 08 Jan 2015 23:05:33 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Content-Length: 1
Connection: close
Content-Type: text/html

¿
disconnecting.


Men...
Om jag tar bort HTTP/1.1 för att slippa headern så blir det ju fel igen.
Så då blir ju frågan om detta går att lösa också?
Användarvisningsbild
mrfrenzy
Co Admin
Inlägg: 15460
Blev medlem: 16 april 2006, 17:04:10

Re: Arduino ethernet shield - Problem

Inlägg av mrfrenzy »

Du måste ju spara all data i någon array och kasta bort det som är ointressant. Antingen gör du det manuellt med strängsökning eller så använder du ett färdigt http-bibliotek.
Användarvisningsbild
ajje
Inlägg: 2622
Blev medlem: 12 mars 2010, 16:35:31
Ort: Smedjebacken

Re: Arduino ethernet shield - Problem

Inlägg av ajje »

Problemet är att det finns flera virtuella websiter på samma ipadress, då måste man köra http 1.1 för att kunna skilja dem åt.

Kör du inte 1.1 och skickar med en host-header vet inte servern om det är geekjoan.com eller buggfix.se den ska ge dig.
ToPNoTCH
Inlägg: 5142
Blev medlem: 21 december 2009, 17:59:48

Re: Arduino ethernet shield - Problem

Inlägg av ToPNoTCH »

Normalt läser man nog av allt och använder "find" kommandot i Arduino för att börja använda den aktuella datan.

Många använder dedicerade WEB tjänster för att "maska" WEB sidor och bara få ut den data man vill. Då går man i praktiken till WEB Tjänstens URL och den i sin tur anropar din valda sida men gör om resultatet till ren XML eller text och just det du är ute efter.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11142
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino ethernet shield - Problem

Inlägg av GeekJoan »

Humm. Tänkte att jag kunde göra det lätt för mig. Antingen att det fanns en växel (Ex. HTTP/1.1 /n) som skickade det servern vill ha, men ber att inte få tillbaks mer än jag vill ha. Den kan ju säga till servern att jag är geekjoan.com men du behöver inte tala om vem du är, ge mig bara svaret. ?

Men om det inte går så får det bli till att plocka ut det intressanta och sen kasta resten.
ToPNoTCH
Inlägg: 5142
Blev medlem: 21 december 2009, 17:59:48

Re: Arduino ethernet shield - Problem

Inlägg av ToPNoTCH »

Om det är din server och din sida kan du väl bara kasta med en parameter i URL och presentera en enklare sida med det du vill ha, om parametern är satt.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 11142
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino ethernet shield - Problem

Inlägg av GeekJoan »

Det är inte min min server.
Skriv svar