Hi
I am trying to connect my Arduino ethernet to my isp where my homepage is. I have made a php script to add values to the data base. The php script works when I use it from a html POST page. But when I try to use Arduino to update data base I have a problem. I have tried numerous things and I think I have found what the problem is but I do not know why or how to fix it.
The problem seems to be that my homepage is on a shared ip. Lets say my host is myhost.com and it results in ip 212.97.132.103. With regular web browser I can access my script with http://myhost.com/ardu/input.php but not with http://212.97.132.103/ardu/input.php this seems to be the down side of shared ip. I found a couple of posts to get around this using the full url in the client.print("GET… and also send HTTP/1.1 and client.println("Host:… This might help but I get stuck earlier at if (client.connect(server, 80)>0).
This works
//byte server = { 74, 125, 143, 147 }; // Google
if (client.connect(server, 80)>0)
This does not
//byte server = { 212, 97, 132, 103 }; // myhost.com
if (client.connect(server, 80)>0)
With HTTP, you establish a TCP connection to a server and then send an HTTP request to the server. The request includes the host name of the site you want to access in the form of a Host: field within the request header, which is usually the domain name part of the URL you are accessing. Some servers aren’t fussy about what you set the Host: header to, but a single server may accept requests for multiple hosts (sites) and in that case you would need to specify the correct site using the Host: header field.
Client test code that connects to my web server using DNS.
//zoomkat 2-13-12
//DNS and DHCP-based web client test code
//for use with IDE 1.0
//open serial monitor and send an e to test
//and to see test result
//for use with W5100 based ethernet shields
//browser equivelant URL:
// http://web.comporium.net/~shb/arduino.txt
//note that the below bug fix may be required
// http://code.google.com/p/arduino/issues/detail?id=605
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
char serverName[] = "web.comporium.net"; // zoomkat's test web page server
EthernetClient client;
//////////////////////
void setup(){
Serial.begin(9600);
Serial.println("DNS and DHCP-based web client test 2/13/12"); // so I can keep track of what is loaded
Serial.println("Send an e in serial monitor to test"); // what to do to test
// 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);
}
// print your local IP address:
Serial.print("Arduino IP address: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
// print the value of each byte of the IP address:
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
Serial.println();
}
void loop(){
// check for serial input
if (Serial.available() > 0) //if something in serial buffer
{
byte inChar; // sets inChar as a byte
inChar = Serial.read(); //gets byte from buffer
if(inChar == 'e') // checks to see byte is an e
{
sendGET(); // call sendGET function below when byte is an e
}
}
}
//////////////////////////
void sendGET() //client function to send/receive GET request data.
{
if (client.connect(serverName, 80)) { //starts client connection, checks for connection
Serial.println("connected");
client.println("GET /~shb/arduino.txt HTTP/1.0"); //download text
client.println(); //end of get request
}
else {
Serial.println("connection failed"); //error message if no client connect
Serial.println();
}
while(client.connected() && !client.available()) delay(1); //waits for data
while (client.connected() || client.available()) { //connected or data available
char c = client.read(); //gets byte from ethernet buffer
Serial.print(c); //prints byte to serial monitor
}
Serial.println();
Serial.println("disconnecting.");
Serial.println("==================");
Serial.println();
client.stop(); //stop client
}