简单的C语言例子,做一个HTTP POST并消耗响应。
我想创建一个非常简单的C语言应用程序,做一个HTTP帖子。 它将接受一些参数,并使用这些参数来构建一个URL。 我只想做一个简单的HTTP POST,并在不使用curl的情况下得到响应(在需要运行的机器上没有也不会安装这些库)。
伪代码:
1.处理2个args
2.将args放入模板URL:http://api.somesite.com/apikey=ARG1&command=ARG2
3.对生成的URL进行POST操作
4.吸收响应
我在Google和SO的搜索中没有得到任何关于这个问题的信息。
71
3
一条信息有一个标题部分和一个信息主体,中间有一个空行。 即使没有消息正文,也总是需要空行。 头部以一个命令开始,并有另外几行键值对,用冒号和空格隔开。 如果有一个信息主体,它可以是你想要的任何内容。
标题中的行和标题末尾的空白行必须以回车和换行对结束(见https://stackoverflow.com/questions/5757290/http-header-line-break-style),所以这就是为什么这些行的末尾有 \r\n。
一个URL的形式是
http://host:port/path?query_string
。向一个网站提交请求有两种主要方式:
GET:查询字符串是可选的,但如果指定的话,必须是合理的简短。正因为如此,标题可以只是GET命令,而没有其他内容。一个示例信息可以是:
POST:通常情况下,查询字符串中的内容会在信息的正文中出现。正因为如此,标题需要包括Content-Type: 和Content-Length: 属性以及POST命令。 一个示例信息可以是:
因此,为了回答你的问题:如果你感兴趣的URL是http://api.somesite.com/apikey=ARG1&command=ARG2,那么就没有正文或查询字符串,因此也就没有理由进行POST,因为没有任何东西可以放在消息的正文中,所以也没有任何东西可以放在Content-Type:和Content-Length中:
我想如果你真的想,你可以POST。 在这种情况下,你的信息会看起来像:
因此,为了发送消息,C程序需要:
发送和接收调用不一定会发送/接收你给它们的所有数据--它们将返回实际发送/接收的字节数。 你可以在一个循环中调用它们并发送/接收剩余的信息。
在这个例子中,我没有做任何真正的错误检查--当某些东西失败时,我只是退出程序。 让我知道它是否对你有用:
就像其他答案指出的那样,4096字节并不是一个很大的响应。 我随机挑选了这个数字,假设对你的请求的响应会很短。 如果它能大,你有两个选择:
回答评论中提出的问题的额外信息:
如果你想在消息的正文中POST数据怎么办? 那么你确实需要包括Content-Type:和Content-Length:头文件。 Content-Length:是指在分隔头和正文的空行之后的所有内容的实际长度。
下面是一个样本,它需要以下命令行参数:
因此,对于原来的问题,你会运行:
而对于评论中提出的问题,你应该运行:
以下是代码:
杰里的回答很好。然而,它并不能处理大型的回应。一个简单的改变就可以处理这个问题:
添加了处理程序。