curl学习

GitHub - gcesarmza/curl-android-ios: Static libcurl to be used in Android and iOS apps. Build scripts included. No Android source required

GitHub - curl/curl at 50490c0679fcd0e50bb3a8fbf2d9244845652cf0

Android 的libcurl默认使用boringssl

一。Curl 是一个功能强大的开源命令行工具和库,用于进行网络数据传输,它包含了一些常用的模块以支持不同的功能。下面是一些常见的 Curl 模块:

1URL 模块:

用于指定和访问 URL 地址。
支持 HTTP、HTTPS、FTP、SFTP 等协议。
2传输模块:

提供不同的传输方式和协议支持。
支持多线程传输和断点续传。
包括 TCP、UDP、TLS/SSL 等。
3SSL/TLS 模块:

用于安全的加密传输。
提供 SSL/TLS 协议支持。
使用 OpenSSL 或其他 SSL/TLS 库。
4文件处理模块:

支持文件上传和下载。
提供本地和远程文件操作。
包括 FTP、SFTP、SCP 等。
5代理模块:

支持使用代理服务器进行网络访问。
支持 HTTP 代理、SOCKS 代理等。
6Cookie 模块:

支持处理和管理 HTTP Cookie。
包括读取、发送和保存 Cookie。
7进度回调模块:

提供进度监控和回调函数支持。
可用于显示传输进度或实现自定义逻辑。
8DNS 解析模块:

支持 DNS 解析和处理。
包括同步和异步的 DNS 解析。
9转码模块:

支持多种字符编码转换。
包括 UTF-8、ISO-8859、Unicode 等。
10应用层协议模块:

支持不同的应用层协议。
如 HTTP1.1、HTTP2、FTP、SMTP 等。
请注意,不同平台和编译选项可能会影响 Curl 包含的模块。具体情况可以参考 Curl 的文档或官方网站获取更详细的信息。

二。Android 自带的 libcurl 是一个内置的 Curl 库,它提供了基本的网络传输功能。以下是 Android 自带的 libcurl 主要模块:

URL 模块:

用于指定和访问 URL 地址。
支持 HTTP、HTTPS、FTP、SFTP 等协议。
传输模块:

提供不同的传输方式和协议支持。
支持多线程传输和断点续传。
包括 TCP、UDP、TLS/SSL 等。
SSL/TLS 模块:

用于安全的加密传输。
提供 SSL/TLS 协议支持。
使用 OpenSSL 或其它 SSL/TLS 库。
文件处理模块:

支持文件上传和下载。
提供本地和远程文件操作。
包括 FTP、SFTP、SCP 等。
Cookie 模块:

支持处理和管理 HTTP Cookie。
包括读取、发送和保存 Cookie。
进度回调模块:

提供进度监控和回调函数支持。
可用于显示传输进度或实现自定义逻辑。
DNS 解析模块:

支持 DNS 解析和处理。
包括同步和异步的 DNS 解析。
转码模块:

支持多种字符编码转换。
包括 UTF-8、ISO-8859、Unicode 等。
请注意,以上列举的模块是一个常见的设置,但具体的 Android 版本和设备可能会有所差异。你可以查阅 Android 相关文档或官方开发者网站,以获取更准确和详细的信息。

三。

当使用 libcurl 进行 URL 地址的指定和访问时,可以使用以下主要代码和接口:

创建 Curl 句柄:
首先,需要创建一个 Curl 句柄,用于后续的 URL 操作。

CURL *curl = curl_easy_init();
设置 URL:
可以使用 curl_easy_setopt() 函数来设置 URL 地址。

curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
上述代码设置了 URL 地址为 “http://example.com”。

执行 URL 请求:
执行 URL 请求可以使用 curl_easy_perform() 函数。

CURLcode res = curl_easy_perform(curl);
这会执行指定的 URL 请求,并返回请求的结果。

处理响应数据:
调用 curl_easy_perform() 函数后,可以通过一系列的回调函数处理响应数据。

size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
    // 处理响应数据
    return size * nmemb;
}

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
上述代码设置了一个自定义的回调函数 write_callback() 来处理响应数据。

清理和释放资源:
当使用完成 URL 操作后,需要清理和释放相关资源。可以调用 curl_easy_cleanup() 函数来清理 Curl 句柄。

curl_easy_cleanup(curl);
其他常用的 URL 相关选项:

CURLOPT_FOLLOWLOCATION:指定是否跟随重定向。
CURLOPT_USERAGENT:设置用户代理标识。
CURLOPT_TIMEOUT:设置超时时间。
CURLOPT_HTTPHEADER:设置自定义的请求头。
CURLOPT_POSTFIELDS:设置请求体数据。
以上是使用 libcurl 进行 URL 指定和访问的主要代码和接口。请注意,这只是一个简要的示例,并不包含所有的 URL 模块的功能和选项。你可以参考 libcurl 的官方文档以获取更详细和全面的信息。

四。

当使用 libcurl 进行 SSL/TLS 加密传输时,可以使用以下主要代码和接口:

初始化 SSL/TLS 库:
在使用 SSL/TLS 功能之前,需要初始化 SSL/TLS 库。这可以通过调用 curl_global_init() 函数来完成。

curl_global_init(CURL_GLOBAL_SSL);
设置 SSL/TLS 选项:
可以设置一些 SSL/TLS 相关的选项,如证书验证、密码认证等。可以使用 curl_easy_setopt() 函数来进行设置。

CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);
上述代码设置了证书验证,其中 CURLOPT_SSL_VERIFYPEER 控制是否验证对等方的证书,而 CURLOPT_SSL_VERIFYHOST 控制是否验证主机名称。

指定证书和密钥:
如果你需要使用特定的证书和私钥进行 SSL/TLS 加密传输,可以通过设置 CURLOPT_SSLCERT 和 CURLOPT_SSLKEY 选项来指定它们的文件路径。

curl_easy_setopt(curl, CURLOPT_SSLCERT, "/path/to/client_certificate.pem");
curl_easy_setopt(curl, CURLOPT_SSLKEY, "/path/to/client_private_key.pem");
执行 SSL/TLS 请求:
当配置完成后,可以通过调用 curl_easy_perform() 函数执行 SSL/TLS 请求,并进行加密传输。

CURLcode res = curl_easy_perform(curl);
此函数将执行带有 SSL/TLS 的网络请求,并返回请求的结果。

清理和释放资源:
当使用完成 SSL/TLS 功能后,需要清理和释放相关资源。可以调用 curl_easy_cleanup() 函数和 curl_global_cleanup() 函数进行清理。

curl_easy_cleanup(curl);
curl_global_cleanup();
以上是使用 libcurl 进行 SSL/TLS 加密传输的主要代码和接口。请注意,这只是一个简要的示例,并不包含所有的 SSL/TLS 功能和选项。你可以参考 libcurl 的官方文档以获取更详细和全面的信息。

你可能感兴趣的:(Android,curl)