【问题标题】:Why does ESP8266 report DNS fail when loading php URL?为什么 ESP8266 在加载 php URL 时会报告 DNS 失败?
【发布时间】:2016-07-16 11:32:09
【问题描述】:

使用 ESP8266 并使用以下 AT 命令我可以成功获取网页:

AT+CIPSTART="TCP","www.somewebsite.com",80
AT+CIPSEND=80
> GET http://www.somewebsite.com HTTP/1.0
<I get a bunch of HTML here>

到目前为止一切顺利。现在我的网站上有一个 php 页面,它接受一些参数并相应地更新数据库中的表。所以当我输入:

http://www.mywebsite.com/mypage.php?arg1=one&arg2=two

它成功更新了表。现在,当我尝试使用 ESP8266 做同样的事情时,我得到一个 DNS 失败:

AT+CIPSTART="TCP","http://www.mywebsite.com/mypage.php?arg1=one&arg2=two",80
<get DNS fail here>

即使我尝试不带参数的 php 页面,我的 DNS 也会失败:

AT+CIPSTART="TCP","http://www.mywebsite.com/mypage.php",80
<get DNS fail here>

有人知道发生了什么吗?难道是php页面不在80端口上?如果是这种情况,我如何找出它在哪个端口上?

顺便说一句,如果我对我网站上的 html 页面执行相同的操作,它就可以正常工作。

编辑: 当我尝试这个时:

AT+CIPSTART="TCP","www.mywebsite.com",80
> GET /mypage.php?arg1=one,arg2=two

我得到这个输出:

错误 404 - 未找到

当我尝试时:

AT+CIPSTART="TCP","www.mywebsite.com",80
> GET http://www.mywebsite.com/mypage.php?arg1=one,arg2=two

我得到的是 www.mywebsite.com/index.html 的 html 代码,而不是 php 页面。

我也不确定 GET 命令中的“HTTP/1.0”是做什么的?

【问题讨论】:

  • 参数应该是网站的域名。 URL 的其余部分在GET 之后。

标签: php tcp esp8266


【解决方案1】:

您不要将 URL 放在 AT+CIPSTART 行上,它只需要服务器的名称。 URL 的其余部分在GET 之后。此外,如果您的服务器进行虚拟主机,您需要发送一个Host: 标头来告诉它使用哪个服务器名称。

AT+CIPSTART="TCP","www.mywebsite.com",80
> GET /mypage.php?arg1=one&arg2=two HTTP/1.1
> Host: www.mywebsite.com

【讨论】:

  • 谢谢。我试过这个,我得到一个错误 404 page not found。我已将我运行的命令和输出添加到原始问题中。
  • 我已更新答案以包含 Host: 标头,这是区分虚拟服务器所必需的。
  • 感谢您的出色回答。有效!我还在 stackoverflow 上找到了这个命令(找不到源代码,如果找到请在此处发布): 在终端中运行。这样您就可以发送 HTTP 命令。我发现它非常适合在对 ESP8266 进行编程之前测试命令。
猜你喜欢
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
相关资源
最近更新 更多