Как организовать POST запрос на сайт.

Dima85
Offline
Зарегистрирован: 07.01.2013

Добрый день. Подскажите пожалуйста каким образом можно в arduino организовать такой POST запрос:

void loop()  {

Как это заставить работать?:
POST http://vasja.ru/post.php
name=vasja
pass=123


delay(4000);
}

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013
const char httpPost[] PROGMEM =
"POST %s HTTP/1.0\r\n"
"From: MyForm\r\n"
"User-Agent: HTTPTool/1.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: %d\r\n"
"\r\n"
"%s\r\n";
String String_var = "name=vasj&apass=123";
sprintf(buf, httpPost, "/post.php", String_var.length(), tring_var.toCharArray());

buf отправляется на порт целевого сервера по TCP соединению.

Или просто использовать функции из библиотек.

Dima85
Offline
Зарегистрирован: 07.01.2013

Расскажите пожалуйста подробней. На данном этапе ругается на:

"%s\r\n";

internet5_fin.ino: In function 'void loop()':
internet5_fin:191: error: array must be initialized with a brace-enclosed initializer
internet5_fin:193: error: 'buf' was not declared in this scope
internet5_fin:193: error: 'tring_var' was not declared in this scope

 

leshak
Offline
Зарегистрирован: 29.09.2011

Из этого

const char* httpPost[] PROGMEM

Попробуйте, либо убрать звездочку

const char httpPost[] PROGMEM

Либо убрать квадратные скобки

const char* httpPost PROGMEM

Вообще что-бы это получился либо указатель на char, либо массив чаров (который суть тот же самый указатель на char).

А то так вышло "массив указателей на char", ну а массив, раз ему не указанна длина, нужно инициализировать (о чем ошибка вам и сказала).

string - текстовые строки | Аппаратная платформа Arduino

Вот как раз "пример" там и есть то что вас получилось.

Dima85
Offline
Зарегистрирован: 07.01.2013

int buf; 
int tring_var;
int toCharArray;

***

void loop() {
  
const char* httpPost[] PROGMEM =
{"POST %s HTTP/1.0\r\n",
"From: MyForm\r\n",
"User-Agent: HTTPTool/1.0\r\n",
"Content-Type: application/x-www-form-urlencoded\r\n",
"Content-Length: %d\r\n",
"\r\n",
"%s\r\n"};
String String_var = "name=vasj&apass=123";
sprintf(buf, httpPost, "/post.php", String_var.length(), tring_var.toCharArray());

Теперь ругается на перменные:

internet5_fin.ino: In function 'void loop()':
internet5_fin:189: error: request for member 'toCharArray' in 'tring_var', which is of non-class type 'int'

Хотя выше я им задал int, так же пробовал long, безрезультатно.

В верху подключены:

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

 

maksim
Offline
Зарегистрирован: 12.02.2012

А это что вообще такое?

int tring_var;
int toCharArray;
...
tring_var.toCharArray()

Непонятная строка и переменные - значит инициализирую переменные с непонятными именами...   такая ваша логика?

  char buf [100];
  const char httpPost[] PROGMEM =
    "POST %s HTTP/1.0\r\n"
    "From: MyForm\r\n"
    "User-Agent: HTTPTool/1.0\r\n"
    "Content-Type: application/x-www-form-urlencoded\r\n"
    "Content-Length: %d\r\n"
    "\r\n"
    "%s\r\n";
  char String_var[] = "name=vasj&apass=123";
  sprintf(buf, httpPost, "/post.php", strlen(String_var), String_var);

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Продвинутый вариант:

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "vasja.ru";
const char httpPost[] PROGMEM =
"POST %s HTTP/1.0\r\n"
"From: MyForm\r\n"
"User-Agent: HTTPTool/1.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: %d\r\n"
"\r\n"
"%s\r\n";
IPAddress ip(192,168,0,177);
EthernetClient client;
void setup() {
  Serial.begin(9600);
  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");
    char buf[255];
    sprintf(buf, httpPost, "/post.php", 19, "name=vasj&apass=123");
    client.print(buf);
  } 
  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);
  }
}

Вообще предполагалось что нужно показать пример запроса POST, иначе вам сюда

А этот совсем для идиотов:

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "vasja.ru";
IPAddress ip(192,168,0,177);
EthernetClient client;
void setup() {
  Serial.begin(9600);
  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("POST /post.php HTTP/1.0");
    client.println("From: MyForm");
    client.println("User-Agent: HTTPTool/1.0");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("Content-Length: 19");
    client.println("");
    client.println("name=vasj&apass=123");
    
  } 
  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);
  }
}

Программирование для домохозяек?

Лёнька
Offline
Зарегистрирован: 11.05.2016

Я новичок в среде программирования arduino uno и ENC28J60 плата. Возможно ли организовать спомощью них POST запрос,если да то подскажите пожалуйста как. В google и ya нету ничего толкового. Особенно про библиотеку EtherCard.h