这个文档是小编在curl官网上使用谷歌翻译翻译的,详细信息看官网
curl
URL 接口提供解析和生成 URL 的功能。
您仍然只在代码中包含
使用curl_url创建一个包含 URL 信息和资源的句柄:
CURLU *h = curl_url();
完成后,使用curl_url_cleanup进行清理:
curl_url_cleanup(h);
当您需要句柄的副本时,只需使用curl_url_dup复制它:
CURLU *nh = curl_url_dup(h);
通过使用curl_url_set将 URL “设置”到句柄,URL 被解析并存储在句柄中。如果 URL 在语法上不正确,它将返回错误。
rc = curl_url_set(h, CURLUPART_URL, "https://example.com:449/foo/bar?name=moo", 0);
第四个参数中的零是用于更改特定功能的位掩码。
如果成功,这会将 URL 存储在句柄内的各个部分中。
当句柄已经包含有关 URL 的信息时,设置相对 URL 将使其“重定向”以适应它。
rc = curl_url_set(h, CURLUPART_URL, "../test?another", 0);
`CURLU` 句柄代表一个 URL,您可以使用curl_url_get轻松提取它:
字符 *url; rc = curl_url_get(h, CURLUPART_URL, &url, 0); curl_free(url);
第四个参数中的零是用于更改特定功能的位掩码。
解析 URL 或设置部分后,您可以随时从句柄中提取这些部分。
rc = curl_url_get(h, CURLUPART_HOST, &host, 0);
rc = curl_url_get(h, CURLUPART_SCHEME, &scheme, 0);
rc = curl_url_get(h, CURLUPART_USER, &user, 0);
rc = curl_url_get(h, CURLUPART_PASSWORD, &password, 0);
rc = curl_url_get(h, CURLUPART_PORT, &port, 0);
rc = curl_url_get(h, CURLUPART_PATH, &path, 0);
rc = curl_url_get(h, CURLUPART_QUERY, &query, 0);
rc = curl_url_get(h, CURLUPART_FRAGMENT, &fragment, 0);
除非用户在第四个位掩码参数中设置了 CURLU_URLDECODE 标志,否则不会对提取的部分进行 URL 解码。
完成后记得使用curl_free释放返回的字符串!
用户设置单独的 URL 部分,或者在解析完整的 URL 之后,或者没有解析这样的部分。
rc = curl_url_set(urlp, CURLUPART_HOST, "www.example.com", 0);
rc = curl_url_set(urlp, CURLUPART_SCHEME, "https", 0);
rc = curl_url_set(urlp, CURLUPART_USER, "约翰", 0);
rc = curl_url_set(urlp, CURLUPART_PASSWORD, "doe", 0);
rc = curl_url_set(urlp, CURLUPART_PORT, "443", 0);
rc = curl_url_set(urlp, CURLUPART_PATH, "/index.html", 0);
rc = curl_url_set(urlp, CURLUPART_QUERY, "name=john", 0);
rc = curl_url_set(urlp, CURLUPART_FRAGMENT, "锚点", 0);
除非用户使用 `CURLU_URLENCODE` 标志请求它,否则集合部分不是 URL 编码的。
应用程序可以将字符串附加到查询部分的右端,并将 `CURLU_APPENDQUERY` 标志添加到curl_url_set。
想象一个持有 URL https://example.com/?shoes=2
的句柄。然后应用程序可以将字符串 `hat=1` 添加到查询部分,如下所示:
rc = curl_url_set(urlp, CURLUPART_QUERY, "hat=1", CURLU_APPENDQUERY);
它甚至会注意到缺少与号(&
)分隔符,因此它也会注入一个,并且句柄的完整 URL 将等于https://example.com/?shoes=2&hat=1
。
附加的字符串当然也可以在添加时获得 URL 编码,如果被要求进行 URL 编码,编码过程将跳过“=”字符。例如,将 `candy=N&N` 附加到我们已有的内容中,并对其进行 URL 编码以处理数据中的 & 符号:
rc = curl_url_set(urlp, CURLUPART_QUERY, "candy=N&N", CURLU_APPENDQUERY | CURLU_URLENCODE);
现在 URL 看起来像
https://example.com/?shoes=2&hat=1&candy=N%26N`
URL API 是在 libcurl 7.62.0 中引入的。