TCP 实现HTTP获取网络服务器数据(如百度网页)

如下获取百度网页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,\
}"
};

 

 

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值