某些项目的GitLab Pages API 404错误

时间:2017-12-06 15:27:33

标签: gitlab gitlab-api gitlab-pages

我一直在编写自动化脚本,使用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":....]

1 个答案:

答案 0 :(得分:1)

我终于明白了(虽然我仍然会把它归类为GitLab的一个bug)。

ID需要进行url编码,这就是为什么我用/替换了存储库名称中的%2F。但是,字符.应该不是问题(前一个网址中的-不会导致任何问题)。但是,将.替换为%2E会得到预期的(正确的)结果。

我认为这是一个错误,因为:

  1. 此行为未记录(允许使用哪些字符?)。
  2. 即使没有编码.,没有域名的网址也能完美运行,包括添加新域的API(也会将域作为表单参数,而不是URL)。
  3. TL; DR

    使用:

    pallavagarwal07%2Fpallavagarwal07%2Egitlab%2Eio
    

    而不是

    pallavagarwal07%2Fpallavagarwal07.gitlab.io
    
    URL中的

    使其有效。