user-0 提问: C语言用socket怎么发送post请求，携带数据

回复:
user: user-0
content: 引用 2 楼 mxway 的回复:[quote=引用 1 楼 zzzrrr1989 的回复:] "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字节。如果不是，那服务器当然就会出现想不到的问题了。 [/quote] ------------------------------------------------------------------- 可以了，3Q

user: user-0
content: 引用 12 楼 luciferisnotsatan 的回复:实际使用的话，还是用wininet，libcurl这些库吧。 自己写，可以看下RFC 2616协议，了解HTTP的格式是怎么样的 --------------------------------------------------------------------------------------- 感谢回复，我有空了解下。 因为这里是在改别人的代码，以前是用的get，但是现在要带不少数据到服务器，用get就不合适了，改成post。socket那套东西都是原来的，懒得重写。

user: user-1
content: 实际使用的话，还是用wininet，libcurl这些库吧。 自己写，可以看下RFC 2616协议，了解HTTP的格式是怎么样的

user: user-2
content: 引用 10 楼 zzzrrr1989 的回复:恩，我试下~~顺便问下，"Content-Type: application/x-www-form-urlencoded\r\n"这句可以不写么？ 这个不太清楚，可以先带上，测试成功后再去掉试下。如果不明白那就看rfc2616文档，这个最权威。

user: user-0
content: 引用 9 楼 mxway 的回复:[quote=引用 8 楼 zzzrrr1989 的回复:] [quote=引用 7 楼 mxway 的回复:] 是的。比如你发送的实际字节是100，但Content-Length是200，这时服务器程序接收到你的100字节后，会认为你发送的数据还没发完，有可能会一直等你下面100个字节。 ------------------------------------------------------------------------------------ 比如，我要发送 mac=cc:34:29:14:13:ce&token=0a96828bf42fafc714495360b8848ad11d663280 就应该设置成 strlen(xxx) ?[/quote] 是的。我不清楚你发的那个别人写的例子有没有测试过，还有就是那个程序请求的服务器程序是怎么处理的。[/quote] -------------------------------------------------------------------------------------- 恩，我试下~~顺便问下，"Content-Type: application/x-www-form-urlencoded\r\n"这句可以不写么？

user: user-2
content: 引用 8 楼 zzzrrr1989 的回复:[quote=引用 7 楼 mxway 的回复:] 是的。比如你发送的实际字节是100，但Content-Length是200，这时服务器程序接收到你的100字节后，会认为你发送的数据还没发完，有可能会一直等你下面100个字节。 ------------------------------------------------------------------------------------ 比如，我要发送 mac=cc:34:29:14:13:ce&token=0a96828bf42fafc714495360b8848ad11d663280 就应该设置成 strlen(xxx) ?[/quote] 是的。我不清楚你发的那个别人写的例子有没有测试过，还有就是那个程序请求的服务器程序是怎么处理的。

user: user-0
content: 引用 7 楼 mxway 的回复:是的。比如你发送的实际字节是100，但Content-Length是200，这时服务器程序接收到你的100字节后，会认为你发送的数据还没发完，有可能会一直等你下面100个字节。 ------------------------------------------------------------------------------------ 比如，我要发送 mac=cc:34:29:14:13:ce&token=0a96828bf42fafc714495360b8848ad11d663280 就应该设置成 strlen(xxx) ?

user: user-2
content: 是的。比如你发送的实际字节是100，但Content-Length是200，这时服务器程序接收到你的100字节后，会认为你发送的数据还没发完，有可能会一直等你下面100个字节。

user: user-0
content: 引用 5 楼 zzzrrr1989 的回复: ------------------------------------------------------ 这里的length是375，但是下面明显不是375~~还是说图中的代码也是错的？

user: user-0

user: user-0
content: 引用 2 楼 mxway 的回复:[quote=引用 1 楼 zzzrrr1989 的回复:] "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字节。如果不是，那服务器当然就会出现想不到的问题了。 [/quote] ----------------------------------------------------------------------------------------- 字节数必须要跟实际发送的一样多么？ 我看别人写的：

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

user: user-2
content: 引用 1 楼 zzzrrr1989 的回复:"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字节。如果不是，那服务器当然就会出现想不到的问题了。

user: user-0
content: 求高手帮忙看下啊~~  "Content-Type: application/x-www-form-urlencoded\r\n"如果这句最后的\r\n改成/r/n，则这个post，服务器还是能收到的，但是后面的mac跟token的值获取不到，而不这么改的话，服务器竟然都收不到这个post请求，不知道啥原因~~~