如下获取百度网页GET、POST时Host: 119.75.217.109后面回车空一行;Data: {"talk" :"123456"}后面回车回车空两行;这样格式发送数据才会有效。
POST http://119.75.217.109/ HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 18
Host: 119.75.217.109
Data: {"talk" :"123456"}
或者
//JSON格式发送数据——数据库接收的为String字符串需要转换JSON格式
POST / HTTP/1.1
Content-Type: application/json; charset=UTF-8
Content-Length: 17
Host: 192.168.2.134:8888
Connection: Keep-Alive
{"talk":"123456"}
//数据库接收的为二进制格式数据utf_8
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length:17
Host: 192.168.2.134
{"talk":"123456"}
串口助手通过TCP 发送HTTP数据HAED头,来模拟HTTP发送POST请求,获取百度网页。
URL:119.75.217.109
Data:{"talk" :"123456"}
HTTP_POST_HEAD: POST http://119.75.217.109/ HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 18
Host: 119.75.217.109
此例显示为串口助手使用TCP做为服务器,使用网络调试助手以HTTP客服端——POST请求服务器。
使用单片机发送TCP 实现HTTP获取百度网页源码如下:
#define Hand_type "POST"
#define Http_Server_IP "119.75.217.109"
#define Http_Server_Port "80"
#define Http_type "HTTP/1.1"
#define Content_Type_json "json; charset=UTF-8"
#define Content_Type_Hex "x-www-form-urlencoded"
#define Connection_Type "Keep-Alive"
char HTTP_POST_HEAD1[] =
{
"{\"talk\":\"123456\"}\r\n"
};
void Send_Http(void)
{
//http头与后面数据分开发送的时候,要先发送一个换行,但是这个换行不算总长度
len += sprintf(&pTextBuff[len],"%s ",Hand_type);//请求格式POST/GET
len += sprintf(&pTextBuff[len],"/ ");
len += sprintf(&pTextBuff[len],"%s\r\n",Http_type);//HTTP的协议版本
len += sprintf(&pTextBuff[len],"Content-Type: application/%s\r\n",Content_Type_json);//报文发送数据格式JSON
len += sprintf(&pTextBuff[len],"Content-Length: 17\r\n");//发送数据的长度
len += sprintf(&pTextBuff[len],"Host: ");
len += sprintf(&pTextBuff[len],"%s:%s\t\n",Http_Server_IP ,Http_Server_Port);//发送数据的地址和端口
len += sprintf(&pTextBuff[len],"Connection: %s\r\n\r\n",Connection_Type);//保持长连接
len += sprintf(&pTextBuff[len],"%s",HTTP_POST_HEAD);//发送的数据
g_Ethernet.iTxPkgLength = len;//要发送的包长度
memcpy((uint8_t*)&g_Ethernet.TxBuffer,(char*)(pTextBuff),len);//拷贝到网口BUF中
Ethernet_Tx_ReStart();//开始发送数据
}
注意:
//计算数据长度\"talk\"时,符号 \、\r、\n不在计数范围内,所以\"talk\"一共6个字节。
同时HTTP_POST_HEAD[]里面DaTa也可以写成如下格式(数据长度依然为17)
char HTTP_POST_HEAD1[] =
{
"{\
\"talk\":{\
1,\
2,\
3,\
4,\
5,\
6,\
}"
};