我一直在编写自动化脚本,使用Namesilo,Letsencrypt和Gitlab API生成和更新SSL证书。 我几乎到了最后,但在尝试更新Gitlab上的SSL证书时遇到404错误。
奇怪的是,错误只发生在我的两个项目中。具体来说,运行:
curl --header "Private-Token: XXXXXX" "https://gitlab.com/api/v4/projects/pallavagarwal07%2Fshort-links/pages/domains/pallav.xyz"
正常工作,并在项目pallav.xyz
中提取域short-links
的详细信息。
但是,跑步:
curl --header "Private-Token: XXXXX" "https://gitlab.com/api/v4/projects/pallavagarwal07%2Fpallavagarwal07.gitlab.io/pages/domains/varstack.com"
返回404错误。但是,令我们更奇怪的是,如果我从URL中删除域名varstack.com
,它会按预期为我提供域列表:
curl --header "Private-Token: XXXXX" "https://gitlab.com/api/v4/projects/pallavagarwal07%2Fpallavagarwal07.gitlab.io/pages/domains"
返回:
[{"domain":"varstack.com","url":"https://varstack.com","certificate":....]
答案 0 :(得分:1)
我终于明白了(虽然我仍然会把它归类为GitLab的一个bug)。
ID需要进行url编码,这就是为什么我用/
替换了存储库名称中的%2F
。但是,字符.
应该不是问题(前一个网址中的-
不会导致任何问题)。但是,将.
替换为%2E
会得到预期的(正确的)结果。
我认为这是一个错误,因为:
.
,没有域名的网址也能完美运行,包括添加新域的API(也会将域作为表单参数,而不是URL)。TL; DR
使用:
pallavagarwal07%2Fpallavagarwal07%2Egitlab%2Eio
而不是
pallavagarwal07%2Fpallavagarwal07.gitlab.io
URL中的使其有效。