Go Down

Topic: [solved]problem with get and ethernet (Read 170 times) previous topic - next topic

knibal

Oct 17, 2014, 01:52 pm Last Edit: Oct 17, 2014, 05:41 pm by knibal Reason: 1
Hi!
I have a arduino mega and ethernet shield.
I configure a web server with php files. If i write in my navigator www.domain.com/iot.php?valor=22.55 the data up correct to mysql.
I modified webcliend example to upload the data to mysqul from arduino mega but not found.
it s the code

Code: [Select]
#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[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "www.domain.com";    // name address for Google (using DNS)

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192,168,1,177);
float temperatura=39;

// 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:
   // try to congifure using IP address instead of DHCP:
   Ethernet.begin(mac, ip);
 }
 // 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(server, 80)) {
   Serial.println("connected");
   client.print("GET /iot.php?valor=88"); // Enviamos los datos por GET
   //client.print(temperatura);
   client.println(" HTTP/1.0");
   client.println("User-Agent: Arduino 1.0");
   client.println();
   Serial.println("Conectado");
 
   
 }
 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);
 }
}


and in serial monitor the arduino write

connecting...
connected
Conectado
HTTP/1.1 404 Not Found
Date: Fri, 17 Oct 2014 11:49:22 GMT
Server: Apache
Content-Length: 324
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /iot.php was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

disconnecting.


i understand that arduino conect to the server and dont find iot.php but the file is it

SurferTim

It told you what the problem is. The server did not have this page:
Quote
The requested URL /iot.php was not found on this server.

Are you sure there is a /iot.php document on the server?

knibal

Yes in server i have html folder for defect i up the file. if i wite in te web broser www.domain.com/iot.php?valor=22 for example this work fine

SurferTim

#3
Oct 17, 2014, 02:33 pm Last Edit: Oct 17, 2014, 02:37 pm by SurferTim Reason: 1
If that is really the domain you are using (www.domain.com), it is at IP address 65.254.244.180. Is that the server IP you are using?

The return value for the client.connect function has changed if you are using a domain name as the server parameter rather than an IP. It returns 1 on success, and either zero or a negative number if failed. Use this connect call instead:
Code: [Select]
 // if you get a connection, report back via serial:
 if (client.connect(server, 80) == 1) {


edit: That link doesn't work with my web browser. I get an Error 404, just like your ethernet shield does.
http://www.domain.com/iot.php?valor=22.55

knibal

#4
Oct 17, 2014, 03:20 pm Last Edit: Oct 17, 2014, 05:39 pm by knibal Reason: 1
I remplace it in the example. The real domain is www.***.com.
In the code i use char server[]='www.***.com" in web broser www.***.com/iot.php?valor=

The arduino connect with domain

SurferTim

#5
Oct 17, 2014, 03:31 pm Last Edit: Oct 17, 2014, 04:00 pm by SurferTim Reason: 1
Your server is a virtual host. You must include the "Host:" parameter to connect to your virtual host.
Code: [Select]
 if (client.connect(server, 80) == 1) {
   Serial.println("connected");
   client.print("GET /iot.php?valor=88"); // Enviamos los datos por GET
   //client.print(temperatura);
   client.println(" HTTP/1.0");

// add this
   client.println("Host: www.domain.com");

   client.println("User-Agent: Arduino 1.0");
   client.println();
   Serial.println("Conectado");


edit: I removed your real domain name from my post. You might want to do the same on your previous post.


knibal

Thank you very much. It is the solution.

Go Up