我想创建一个非常简单的C应用程序,它可以执行HTTP post。它将接受几个参数,并使用这些参数来构造URL。我只想做一个简单的HTTPPOST,并在不使用curl的情况下获得响应(库没有安装在需要运行的机器上)。
伪代码:
1.进程2参数
1.将参数放入模板URL:http://api.somesite.com/apikey=ARG1&command=ARG2
1.对生成的URL执行POST
1.消费React
我的谷歌和SO搜索没有在这个问题上产生任何结果。
我想创建一个非常简单的C应用程序,它可以执行HTTP post。它将接受几个参数,并使用这些参数来构造URL。我只想做一个简单的HTTPPOST,并在不使用curl的情况下获得响应(库没有安装在需要运行的机器上)。
伪代码:
1.进程2参数
1.将参数放入模板URL:http://api.somesite.com/apikey=ARG1&command=ARG2
1.对生成的URL执行POST
1.消费React
我的谷歌和SO搜索没有在这个问题上产生任何结果。
4条答案
按热度按时间vaqhlq811#
消息具有由空行分隔的标题部分和消息体。即使没有消息正文,也始终需要空行。标头以一个命令开始,并有额外的几行键值对,由冒号和空格分隔。如果有消息正文,它可以是您希望的任何内容。
标题中的行和标题末尾的空行必须以回车和换行符对结束(参见HTTP header line break style),这就是为什么这些行的末尾有\r\n。
URL的格式为
http://host:port/path?query_string
向网站提交请求有两种主要方式:
所以,回答你的问题:如果您感兴趣的POST URL是http://api.somesite.com/apikey=ARG1&command=ARG2,则没有正文或查询字符串,因此没有理由POST,因为没有任何内容可以放入消息的正文中,因此也没有任何内容可以放入Content-Type中:内容长度:
我想如果你真的想写的话,你可以写。在这种情况下,您的消息将看起来像:
因此,要发送消息,C程序需要:
send和receive调用不一定会发送/接收您给予它们的所有数据-它们将返回实际发送/接收的字节数。您可以在循环中调用它们并发送/接收消息的其余部分。
我在这个例子中没有做任何真实的的错误检查-当某些东西失败时,我只是退出程序。让我知道它是否适合你:
就像另一个答案指出的那样,4096字节并不是一个很大的响应。我随机选择了这个数字,假设对您的请求的响应会很短。如果它可以很大,你有两个选择:
回答评论中提出的问题的其他信息:
如果您想在消息正文中POST数据,该怎么办?然后你需要包含Content-Type:内容长度:头。Content-Length:是分隔标题和正文的空行之后所有内容的实际长度。
下面是一个采用以下命令行参数的示例:
所以,对于最初的问题,你可以运行:
对于评论中提出的问题,您可以运行:
代码如下:
而且,正如评论中所问的,这里是HTTP/1.1版本:
s4n0splo2#
经过几周的研究。我得到了下面的代码。我相信这是使用SSL与Web服务器进行安全连接所需的最低要求。
上面的代码将详细解释如何与远程服务器建立TLS连接。
重要提示:这段代码不会检查公钥是否由有效的授权机构签名。这意味着我不使用根证书进行验证。不要忘记执行此检查,否则您将不知道您是否连接了正确的网站
当涉及到请求本身。它只不过是手工编写HTTP请求。
您还可以在此link下找到如何在系统中安装openSSL的说明,以及如何编译代码以使用secure library。
v09wglhw3#
杰瑞的回答很好。但是,它不处理大型响应。一个简单的改变来处理这个问题:
3bygqnnd4#
已添加句柄。
添加了主机标头。
添加了linux / windows支持,测试(XP,WIN7)。
警告:错误:如果没有主机、路径或端口作为参数,则为“分段错误”。