在不使用libcurl的情况下从C进行REST API调用

Bha*_*anz 1 c api rest libcurl cortex-m

我试图用C语言进行REST调用; 遇到了libcurl,它成功地动态地完成了这项工作.但是代码需要移植到Cortex M0板上,这需要更小的占用空间.有没有解决方法?我只需要从C进行REST API调用,而无需任何外部库或开销.

小智 7

嗯,你想要多低?

C对REST一无所知,它不知道HTTP,甚至不知道TCP或网络接口之类的东西.在裸机上,您首先要阅读网络接口卡的硬件规格并对其进行编程(通过端口,内存映射寄存器等等) - 您必须了解ARP,IP,ICMP等(当然,实现它),只是为了获得TCP连接.

假设有一个操作系统,您将获得一些API,然后答案将取决于此API允许的内容.典型的级别是"套接字抽象",如BSD套接字,它为您提供了建立TCP连接的功能.因此,您需要做的"全部"就是在此基础上实现HTTP客户端.

不幸的是,HTTP本身是一个复杂的协议.您必须实现所需的所有请求,包括内容类型,传输编码等,并且还要适当地处理所有可能的服务器响应.这些都很多.将内容协商带到表格,部分回复等......这是"无休止"的工作.这正是像curl这样的库已经为你实现所有这些的原因.

所以,很遗憾地说,但是没有简单的答案可以在这里给你你想要的东西.如果您想完成工作,请使用库.也许你可以找到比libcurl更小的东西.

可以做的是自己编译库,静态链接它并使用编译器选项(如gcc's -ffunction-sections -fdata-sections和链接器选项--gc-sections)尝试从您不使用的库中删除代码,这可能有助于减小大小.

  • @Bhanz [这是我的](https://github.com/iharob/libhttpio).它运作良好,并且是自包含的.当然它可以改进很多,但现在我没有时间.顺便说一句:它需要*openssl*但是你可以尝试在没有它的情况下编译它,我想这不会很难. (2认同)