首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Javascript - Arduino - POST请求- WiFi101 -连接问题

Javascript - Arduino - POST请求- WiFi101 -连接问题
EN

Stack Overflow用户
提问于 2018-03-29 06:57:58
回答 1查看 453关注 0票数 2

在我的代码中,我试图向IFTTT服务webhooks (maker)发送一个POST请求。

我使用了几个库,主要是WiFi101

我使用的是Arduino MKR1000。

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

在下面的代码中,当我调用sslClient.connect(host, 443);时,它无法建立连接。我试着绕过这一步,只是试着把数据打印到主机上,但是这也不起作用。

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

wifiSetup()运行良好,连接建立得相当快。

我所指的代码如下:

全局定义

代码语言:javascript
代码运行次数:0
运行
复制
//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设置过程:运行时没有问题

代码语言:javascript
代码运行次数:0
运行
复制
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
}

下面的代码就是引起问题的代码

代码语言:javascript
代码运行次数:0
运行
复制
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);
} 

有没有人有什么解决方案或者需要解决的问题?

感谢大家的帮助,

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

EN

回答 1

Stack Overflow用户

发布于 2018-03-29 08:39:32

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

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

代码语言:javascript
代码运行次数:0
运行
复制
const char* host = "maker.ifttt.com";
代码语言:javascript
代码运行次数:0
运行
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49545491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档