【问题标题】:Javascript - Arduino - POST request - WiFi101 - Connection issueJavascript - Arduino - POST 请求 - WiFi101 - 连接问题
【发布时间】:2023-04-03 18:22:01
【问题描述】:

在我的代码中,我尝试向 IFTTT 服务 webhook(制造商)发送 POST 请求。

我正在使用几个库,主要是WiFi101

我正在使用 Arduino MKR1000。

我已经更新了固件,并添加了https://maker.ifttt.com:443的证书。

当我在下面的代码中调用sslClient.connect(host, 443); 时,它无法建立连接。我已经尝试绕过这个并尝试将数据打印到主机,但这也不起作用。

函数返回 false 大约需要 10-20 秒,如果我将主机更改为不正确的变量,那么它会立即返回 false。我假设这是一个好兆头,因为 arduino 正在尝试连接?

wifiSetup() 运行良好,建立连接相当迅速。

我指的代码如下:

全局定义

//WiFi router setup
char ssid[] = "-----";   //network SSID (aka WiFi name)
char pass[] = "-----"; //network password
int status = WL_IDLE_STATUS;
const char* host = "https://maker.ifttt.com";
WiFiSSLClient sslClient;

Wifi 设置程序:运行没有问题

void wifiSetup() {
  // Check for the presence of the shield
  Serial.print("WiFi101 shield: ");
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("NOT PRESENT");
    return; // don't continue
  }
  Serial.println("DETECTED");
  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);                   // print the network name (SSID);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
    // wait 10 seconds for connection:
    delay(10000);
  }
  printWifiStatus();                        // you're connected now, so print out the status
}

下面的代码是导致问题的代码

void sendMessage() {
  if (sslClient.connect(host, 443)) {
    //change this to your Maker setting from https://ifttt.com/services/maker/settings
    String  data = "randomdata";
    sslClient.println("POST /trigger/tank_empty/with/key/bxa");
    sslClient.println("Host: https://maker.ifttt.com");
    sslClient.println("Content-Type: application/json");
    sslClient.print("Content-Length: ");
    sslClient.println(data.length());
    sslClient.println();
    sslClient.print(data);
    sslClient.stop();
    Serial.println("IFTTT request Sucessful");
  }
  else {
    Serial.println("IFTTT request failed");
  }
  delay(20000000);
} 

有没有人有任何解决方案或需要解决的问题?

感谢大家的帮助,

如果您需要任何额外信息,请告诉我。

【问题讨论】:

  • https://maker.ifttt.com 不是有效的主机。
  • 还有don't cross post。你已经问过这个on Arduino SE。
  • 我不明白?什么会构成一个有效的主机? (感谢发帖指南的提醒,我删除了旧帖子)
  • 是ifttt.com 还是maker.ifttt.com?
  • 您可能被ifttt.com 网络服务器阻止

标签: javascript post arduino http-post wifi


【解决方案1】:

https://maker.ifttt.com 不是有效的主机。有效的主机是 IP 地址或域。 https:// 不是域的一部分,而是一个 URL。

您还缺少 HTTP 协议版本 (HTTP/1.1),这可能会导致问题。

const char* host = "maker.ifttt.com";
sslClient.println("POST /trigger/tank_empty/with/key/bxa HTTP/1.1");
sslClient.print("Host: ");
sslClient.println(host); // non hardcoded host header
sslClient.println("Content-Type: application/json");
sslClient.print("Content-Length: ");
sslClient.println(data.length());
sslClient.println();
sslClient.print(data);
sslClient.stop();

【讨论】:

  • 我尝试更改主机,但现在无法立即连接
  • 我已经设法让它与 www.google.com 一起工作,但是当我尝试使用 maker.ifttt.com 时它拒绝连接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多