c - 使用 Arduino 和 HTTP 填写网络表单

标签 c http arduino webclient

我正在尝试让 arduino 登录我创建的网站。
网站上有一个基本表单,其中有两个字段,一个用于密码,一个用于用户名,它还有一个标记为“登录”的提交按钮。

当我使用 chrome 登录时,我使用 fiddler2 嗅探 http 数据包,并尝试使用该 http 帖子中的信息重新创建我自己的登录帖子。

这是我用于登录的代码部分:

if (client.connect(server, 80)) {

 Serial.println("connected to server");

// Make a HTTP request:               
 client.println("POST/username=slwhore&passwd=1234qwer%21&op2=login&lang=english&force_session=1&return=B%3AaHR0cDovL3JlbW90bGV0LmNvbS8%3D&message=0&loginfrom=loginmodule&cbsecuritym3=cbm_56b7d5e7_00583e07_b0b6f81b4c86d117542f5cc7b7c3416e&Submit=Login HTTP/1.1");

client.println("Host:www.remotlet.com");

client.println("Content-Type: application/x-www-form-urlencoded");

client.println("Content-Length: 229");

client.println("Connection: close");

client.println();

然后我有另一段代码接收从主机返回的信息,我知道该代码有效。当我运行此代码时,我能够连接到服务器,但我根本没有得到任何响应。任何帮助将不胜感激。

最佳答案

您的 HTTP 请求是完全错误的,它永远不会被任何类型的服务器网络接受。

第一行:HTTP 第一行是 METHOD URI VERSION。 您没有在方法和 URI 之间添加空格,而且 POST 数据也不像使用 GET 请求时那样是 URI 的一部分。我不知道您的服务器使用什么,但正常的登录通常不会使用 GET,也不会在 URI 内传递登录信息。

第二行:你忘记了一个空格

第四行:您设置了内容长度,但显然没有发送任何内容。

一般注意事项:在 HTTP 中,行终止符是\r\n,而不仅仅是\n。

我建议您使用浏览器执行请求,使用wireshark拦截流量,看看它是如何完成的。

关于c - 使用 Arduino 和 HTTP 填写网络表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758457/

相关文章:

c - 将 float * 和 FILE * 传递给/从 C 中的函数传递

java - Java 中的响应字符串 (http)

c++ - 返回类型为 struct 的函数在每次调用时不返回任何内容

c++ - Arduino 从单个数字输入读取脉宽频率和占空比

c - 在 C(AVR 编程)中是否有一种简单的方法来选择变量应该存储在 RAM 还是 ROM 中并通过所有代码处理它?

c - 最后一个内存块中 Calloc 中的垃圾值

c - 输出位置与原始文本发生变化

c - 十进制转二进制错误输出

json - Angularjs 问题 $http.get 不工作

node.js - Express.js res.send - 它在 Node.js 手册中吗?