-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Description
Hi! I'm writing a launcher for my project and want to download zip files from github release page. It used to work just fine until a few days ago (I did not change the code, it seems like GitHub changed some things to their internal Azure storage). Now I get this error:
<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the
request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:efc27f94-301e-0053-0149-f9c261000000
Time:2025-07-20T07:42:58.3240330Z</Message><AuthenticationErrorDetail>Signature did not match. String to sign used was r
2025-07-20T08:28:42Z
/blob/releaseassetproduction/github-production-release-asset/368971275/c22fddc5-a928-4e16-b104-3450021000b2
96c2d410-5711-43a1XXXXXXXXXXXXXXXXXX
398a6654-997b-47e9-b12b-9515b896b4de
2025-07-20T07:28:01Z
2025-07-20T08:28:42Z
b
2018-11-09
https
2018-11-09
b
https
2018-11-09
b
2018-11-09
b
b
attachment;+filename=Coollab-Windows.zip
attachment;+filename=Coollab-Windows.zip
attachment;+filename=Coollab-Windows.zip
attachment;+filename=Coollab-Windows.zip
application/octet-stream</AuthenticationErrorDetail></Error>
Here is a minimal example to reproduce:
#include <httplib.h>
#include <iostream>
int main()
{
httplib::SSLClient client("github.com");
client.set_follow_location(true);
auto res = client.Get("/Coollab-Art/Coollab/releases/download/1.1.0_UI-Scale/Coollab-Windows.zip");
if (!res)
{
std::cout << "Request failed: " << httplib::to_string(res.error()) << std::endl;
return 1;
}
std::cout << "Status: " << res->status << std::endl;
if (res->status != 200)
std::cout << "Response body: " << res->body << std::endl;
else
std::cout << "Success! Downloaded " << res->body.size() << " bytes" << std::endl;
return 0;
}
Important to note:
- This Python script has no problems downloading the zip:
import requests
url = "https://github.com/Coollab-Art/Coollab/releases/download/1.1.0_UI-Scale/Coollab-Windows.zip"
with requests.get(url, stream=True) as r:
r.raise_for_status()
print("Download complete.")
- This curl command fails
curl -L "https://github.com/Coollab-Art/Coollab/releases/download/1.1.0_UI-Scale/Coollab-Windows.zip"
with the errorcurl: (35) schannel: next InitializeSecurityContext failed: CRYPT_E_NO_REVOCATION_CHECK (0x80092012) - The revocation function was unable to check revocation for the certificate.
, but this one succeeds:curl -L -k "https://github.com/Coollab-Art/Coollab/releases/download/1.1.0_UI-Scale/Coollab-Windows.zip"
(with the-k
flag to disable SSL certificate verification, but doingclient.enable_server_certificate_verification(false);
doesn't help) - Once the zip is downloaded once (either manually via a browser, or using the Python script, or curl) then the C++ code is able to download the zip (for a few hours, until it starts breaking again). So here are a few other failing URLs if you need to test:
"https://github.com/Coollab-Art/Coollab/releases/download/1.4.1-Spout_OUT/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.4.0-Spout_OUT/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.3.3-Color_Themes/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.3.2-Color_Themes/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.3.1-Color_Themes/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.3.0-Color_Themes/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.2.0-MacOS/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.1.1_UI-Scale/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.1.0_UI-Scale/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.0.1_Launcher/Coollab-Windows.zip"
"https://github.com/Coollab-Art/Coollab/releases/download/1.0.0-Launcher/Coollab-Windows.zip"