首页 > 解决方案 > curl PATCH HTTP2 错误

问题描述

我们正在使用 GitLab CD 解决 Heroku 的部署问题。当我们想将新图像 PATCH 到 heroku 时,我们得到一个 curl 错误 16,这似乎是 curl 中的一个错误。

> PATCH /apps/pacific-reaches-85087/formation HTTP/2
1133  > Host: api.heroku.com
1134  > user-agent: curl/7.69.1
1135  > content-type: application/json
1136  > accept: application/vnd.heroku+json; version=3.docker-releases
1141   { [5 bytes data]
1142   * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
1143   { [130 bytes data]
1144   * We are completely uploaded and fine
1145   { [5 bytes data]
1146   *  Connection state changed (MAX_CONCURRENT_STREAMS == 250)!
1147   } [5 bytes data]
1148   *  stopped the pause stream!
1149   100   121    0     0  100   121      0   1043 --:--:-- --:--:-- --:--:--  1052
1150   * Connection #0 to host api.heroku.com left intact
1151   curl: (16) Error in the HTTP2 framing layer

因此,我们想退回到 HTTP1,但后来我们遇到了用于识别 PATCH 的错误格式。日志反馈:

1159  {
1160     "id":"invalid_params",
1161     "message":"Require params: updates."
1162  }
IMAGE_ID=$(docker inspect ${HEROKU_REGISTRY_IMAGE} --format={{.Id}})
PAYLOAD='{"updates": [{"type": "web", "docker_image": "'"$IMAGE_ID"'"}]}'
curl --http1.1 -v -n -X PATCH https://api.heroku.com/apps/$HEROKU_APP_NAME/formation \
  -d "${PAYLOAD}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/vnd.heroku+json; version=3.docker-releases" \
  -H "Authorization: Bearer ${HEROKU_AUTH_TOKEN}"

所以实际的问题是:有人知道如何修改 PAYLOAD 以使其与 HTTP 1.1 兼容吗?

标签: curlheroku

解决方案


推荐阅读