bvanpoortvliet
Member
Hi,
For a project we are trying to monitor a status protocol sent on local network over TCP and post these status messages over HTTPS to a InfluxDB instance on AWS at https://www.influxdata.com/products/influxdb-cloud/.
We are using a teensy 4.1 with a ethernet kit in combination with the Native Ethernet library by vjmuzik https://github.com/vjmuzik/NativeEthernet.
Posting a string to a test instance over LAN to a IP works fine, but whenever we try to post to the AWS subdomain we are greeted with this response:
HTTP/1.1 400 Bad Request
Server: awselb/2.0
Date: Mon, 27 Sep 2021 18:13:02 GMT
Content-Type: text/html
Content-Length: 122
Connection: close
<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
</body>
</html>
Since we verified the headers and body of the post are correct when we post locally, and posting to AWS works when using Postman, we are at a loss at the moment. Unfortunately I have no information about the configuration of the server we try to POST to.
As a test we set-up the WebClientRepeatingTLS example using our own POST headers and body.
Could anyone help us understand why the post to aws is not going through?
Cheers,
Boy
For a project we are trying to monitor a status protocol sent on local network over TCP and post these status messages over HTTPS to a InfluxDB instance on AWS at https://www.influxdata.com/products/influxdb-cloud/.
We are using a teensy 4.1 with a ethernet kit in combination with the Native Ethernet library by vjmuzik https://github.com/vjmuzik/NativeEthernet.
Posting a string to a test instance over LAN to a IP works fine, but whenever we try to post to the AWS subdomain we are greeted with this response:
HTTP/1.1 400 Bad Request
Server: awselb/2.0
Date: Mon, 27 Sep 2021 18:13:02 GMT
Content-Type: text/html
Content-Length: 122
Connection: close
<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
</body>
</html>
Since we verified the headers and body of the post are correct when we post locally, and posting to AWS works when using Postman, we are at a loss at the moment. Unfortunately I have no information about the configuration of the server we try to POST to.
As a test we set-up the WebClientRepeatingTLS example using our own POST headers and body.
Code:
#include <NativeEthernet.h>
uint8_t mac[6];
void teensyMAC(uint8_t *mac) {
for (uint8_t by = 0; by < 2; by++) mac[by] = (HW_OCOTP_MAC1 >> ((1 - by) * 8)) & 0xFF;
for (uint8_t by = 0; by < 4; by++) mac[by + 2] = (HW_OCOTP_MAC0 >> ((3 - by) * 8)) & 0xFF;
Serial.printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}
// initialize the library instance:
EthernetClient client;
const int port = 443;
char server[] = "influxdata.com";
//IPAddress server(192, 168, 1, 246);
String outputMSG = "measurementName,tagKey=tagValue fieldKey=1i";
unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
const unsigned long postingInterval = 5 * 1000; // delay between updates, in milliseconds
void setup() {
teensyMAC(mac);
Serial.begin(9600);
while (!Serial) {
;
}
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1);
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
} else {
Serial.print(" DHCP assigned IP ");
Serial.println(Ethernet.localIP());
}
delay(1000);
}
void loop() {
if (client.available()) {
char c = client.read();
Serial.write(c);
}
if (millis() - lastConnectionTime > postingInterval) {
httpRequest();
}
}
void httpRequest() {
client.stop();
Serial.print("Content-Length: ");
Serial.println(outputMSG.length());
Serial.println("");
if (client.connect(server, port, true)) {
Serial.println("connecting to ");
Serial.print(server);
Serial.print(":");
Serial.println(port);
client.println("POST /api/v2/write?org=ORG_HERE&bucket=BUCKET_HERE&precision=s HTTP/1.1");
client.println("Host: https://eu-central-1-1.aws.cloud2.influxdata.com");
client.println("Authorization: Token <<TOKEN HERE>>");
client.println("Content-Type: text/plain");
client.print("Content-Length: ");
client.println(outputMSG.length());
client.println("Accept-Encoding: gzip, deflate, br");
client.println("Connection: keep-alive");
client.println();
client.println(outputMSG);
client.println();
lastConnectionTime = millis();
} else {
Serial.println("connection failed");
}
}
Could anyone help us understand why the post to aws is not going through?
Cheers,
Boy