C有HTTP2的标准库吗

问题描述 投票:0回答:2

[简介]]

我一直在每周 5 次练习 C 语言 4 个月,我试图做出最好的猜测,以便进入 HTTP2 的 Web 服务器/客户端编程。我使用过 HTML5 和 Javascript 我也使用过 HTTP2 并且在低级别上使用过 SPDY。

[信息]

Debian GNU/Linux (Buster), V.10

                    

编译器 - Clang
标头 HTTP2(?)
标头 HTTP(sys/socket.h、sys/types.h、signal.h、arpa/inet.h) 网络协议 - TCP、HTTP2、HTTP。

[问题]

在玩 Java 时,您会注意到在游戏引擎中使用了很多

HTTP2
。截至 2021 年,
HTTP2
在当前语言中越来越多地被标准化。(焦点->)C 有一个标准库用于处理
HTTP
TCP

HTTP2
使用加密,据我所知基于“
TCP
”。 C 是否有使用“
HTTP2 TCP
”类型的标准。我需要能够从
HTTP2
中读取文本并轻松执行任务(发送(),接收()。(<-FOCUS POINT END).

[决赛]
我可以使用 C 标准 POSIX 库来实际开发 HTTP2 程序吗? 我将如何在 C 中使用 HTTP2 & 它是否可行。

c http system http2 spdy
2个回答
2
投票

HTTP 是一个协议。它定义了计算机相互通信的方式。那里有很多不同的协议; HTTP/2 和 HTTP 基于 TCP/IP,几乎所有计算机都使用它来连接服务器。 TCP/IP 指定如何在客户端和特定服务器之间创建连接,以及如何发送原始字节。 HTTP(2) 是在此之上的一层,它定义了客户端应该如何告诉服务器它想要什么资源。

基本 POSIX 提供的 API 仅扩展到原始 TCP/IP。这是一个应用程序可以发送到 Web 服务器以请求网页的示例(这是一个 HTTP/1 请求,HTTP/2 是二进制和加密的,使其不可读)

GET /somepage HTTP/1.0
Host: example.com

但是,在你的程序中手动组装这些请求有点不方便,尤其是当你开始做发送参数、加密等事情时。在这种情况下,人们应该在机器上使用一些库。重要的是这些是非标准的。可能最常见的之一是

libcurl
.

这里有一个 libcurl 教程。总结:

您可以通过向编译器和链接器提供一些标志来使用 libcurl 编译您的程序。您可以通过运行

curl-config --cflags
curl-config --libs
来获得这些。

curl_global_init(bitfield)
初始化libcurl。位域可以有
CURL_GLOBAL_WIN32
CURL_GLOBAL_SSL
作为它的值。你可能需要
CURL_GLOBAL_SSL
因为你想使用加密。

libcurl 有两个接口:

easy
multi
。我要报道
easy
.

致电curl_easy_init()获得

easy handle
。这个句柄允许你提出请求。

使用

curl_easy_setopt(handle, option, value)
在手柄上设置选项。
handle
是您获得的“easy handle”,
option
是一个常量 - 例如
CURLOPT_URL
用于设置要请求的 URL -
value
是您要将其设置为的值。它通常是一个字符串。

设置回调函数,

option
CURLOPT_WRITEFUNCTION
。它应该有签名
size_t(void *buffer, size_t size, size_t nmemb, void *userp)
。当 libcurl 从服务器接收数据时调用它。通常,它会被调用多次。
nmemb
指出
buffer
中数据的大小。它应该返回成功处理的字节数。通常这是
nmemb
.

使用

curl_easy_perform(handle)
执行请求。

当您完成所有要提出的请求后,请致电

curl_global_cleanup()


1
投票

C标准库中没有专门用于

http2
的部分。

但是,在

http2
中使用
C
绝对是可能的,有据可查且被广泛使用。例如:

  1. curl-信息:https://curl.se/docs/http2.html
  2. nghttp2

有关

http2
和各种编程语言的更多信息可以在这里找到:https://github.com/httpwg/http2-spec/wiki/Implementations

© www.soinside.com 2019 - 2024. All rights reserved.