C语言用socket如何发送post请求,携带数据

C语言用socket怎么发送post请求,携带数据
如题,C语言写的客户端向服务器发送数据,求相关格式:
snprintf(request, sizeof(request) - 1,
"POST %s%sgw_id=%s&sys_uptime=%lu&sys_memfree=%u&sys_load=%.2f&wifidog_uptime=%lu&ap_mac=%s HTTP/1.0\r\n"
"User-Agent: WiFiDog %s\r\n"
"Host: %s\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 200\r\n"
"\r\n"
"mac=%s&token=%s",
auth_server->authserv_path,
auth_server->authserv_ping_script_path_fragment,
config_get_config()->gw_id,
sys_uptime,
sys_memfree,
sys_load,
(long unsigned int)((long unsigned int)time(NULL) - (long unsigned int)started_time),
brlan_mac,
VERSION,
auth_server->authserv_hostname,
first->mac,
first->token);
send(sockfd, request, strlen(request), 0);

其中first->mac,first->token就是要发送的数据。
这么写有问题么?
------解决思路----------------------
引用:
"Content-Type: application/x-www-form-urlencoded\r\n"如果这句最后的\r\n改成/r/n

\r\n不能改成/r/n的,\r\n是rfc的标准。你问题主要在"Content-Length: 200\r\n",你确定
"Content-Length: 200\r\n"
 "\r\n"
之后发送的数据是200字节。如果不是,那服务器当然就会出现想不到的问题了。

------解决思路----------------------
Content-Length: 200
这里的200是POST的BODY有多少字节,你要计算mac=%s&token=%s有几个字节,再设置到Content-Length头.
ps:你用能发HTTP的工具给你服务器发一个POST包,(用Fiddler就可以),看你服务器能不能收到,再用C语言发一个一样的POST请求包过去就可以了。