Dokładnie tak jak napisał @krystian3w to jest zip, który nie jest w repo. I API GitHuba nie pomoże z tym bo pozwala zwrócić jedynie link do pobierania, który już dostarczam aplikacji w inny sposób. Dodałem do kod te dwie linijki o których wspominał gość z tamtego forum, ale połączenie nie chce się nadal utworzyć.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
Dim req As HttpWebRequest = WebRequest.Create("link")
req.AllowAutoRedirect = True
req.ProtocolVersion = HttpVersion.Version10
Try
Dim resp As HttpWebResponse = req.GetResponse()
Catch ex As Exception
Debug.WriteLine("ERR: " & ex.Message)
End Try
Powoli się zastanawiam czy nie zacząć szukać już jakiegoś zamiennika z trzymania tych zipów bo te problemy z durnym pobieraniem z GH mnie denerwują. Pierwsza myśl to była chmura od Google’a lub MS no ale zgaduję, że tam dopiero będzie problem z uzyskaniem takiego “czystego linku” do pobierania i bez tych przekierowań. W ostateczności myślę też nad rozwiązaniem z własnych hostingiem www. Miałem sobie taki za niedługo zakładać (oczywiście płatny bo już nie ma darmowych godnych uwagi) i może nim bym obskoczył działanie tego kodu.
i w pozycji “browser_download_url” dostaję właśnie ten link który używam od początku, ten przed przekierowaniem, znajduje się on ten pod przyciskiem pobierania na stronie GH. Przechwyciłem link, który jest po przekierowaniu, zawiera on już dane w formie parametrów GET o przeglądarce, identyfikatorze pobierania i masę innych danych oraz wiem że jest on tymczasowy (po jakimś czasie przestaje on pobierać plik i wyświetla komunikat odmowy dostępu). Zaraz zrobię próbę z wykorzystaniem OneDrive’a i sprawdę czy tam też są takie jaja od których webclient zgłupieje.
Próba z chmurami od Google’a i Microsoftu połowicznie udana.
OneDrive pozwolił webclientowi pobrać aż 6KB danych i zakończył pobieranie.
Natomiast Google Drive pozwolił pobrać 119KB pliku oraz pokazywał w czasie pobierania, że ilość bitów do pobrania wynosi -1.
No oczywiście nie mogło to zadziałać tak jak powinno, a teraz wracam do przeszukiwania internetu…
Ja nie wiem co Ty robisz. Przy pomocy linków które podał @krystian3w, w 5 minut napisałem działający program w C#. Tu masz cały kod jaki był mi do tego potrzebny.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
namespace HttpFileDownloader
{
class Program
{
static void Main(string[] args)
{
string url = "https://github.com/Aris-t2/CustomCSSforFx/releases/download/1.8.5/custom_css_for_fx_v1.8.5.1.zip";
string dest = "downloaded.zip";
WebClient wc = new WebClient();
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
wc.DownloadFile(url, dest);
}
}
}
Musiałem na własne oczy sprawdzić, że się nie da bo nie chciało mi się w to po prostu wierzyć.
EDIT:
Oczywiście sprawdziłem plik, rozpakowuje się i wszystko jest ok.
U mnie jeśli chce przypisać wartość do SecurityProtocol mam do wyboru tylko 2 opcje: Ssl3 oraz Tls (nie mam do wyboru wartości Tls11 i Tls12)
Wypróbowałem zgodnie z przykładem pobieranie w wątku głównym (bez asynca), spowodowało to zgodnie z planem zawieszenie na chwile aplikacji, ale dzięki temu pojawił się wyjątek do linijki pobierania, komunikat ten co w przypadku httpwebrequest: nie można utworzyć kanału SSL/TLS
Także dla nieścisłości dodam jeszcze raz mój aktualny kod:
Kod oczywiście testowałem na moim przykładzie i na przykładzie linku do CSSa Firefoxa. I tak jak pisałem wcześniej użycie DownloadFile wyrzuca wspomniany błąd, a użycie DownloadFileAsync tylko go ukrywa. Teraz przynajmniej wiadomo dlaczego przerywa nagle pobieranie i znamy komunikat. Zerknąłem jeszcze szybko do internetu w sprawie tego SecurityProtocol i widzę, że chyba jest to związane z frameworkiem na którego się pisze. Ja piszę przy użyciu .NETa w wersji 4.0
Sprawdziłem w internecie wartości tych stałych Ttl11 i Ttl12, są to 768 i 3072. Wprowadziłem je w taki sposób:
ServicePointManager.SecurityProtocol = CType(768, SecurityProtocolType) Or CType(3072, SecurityProtocolType)
I muszę przyznać działa przy obu plikach oraz przy obu funkcjach. Czyli tak, kod @Fizyda działa perfekcyjnie, tylko nie miałem u siebie podpowiedzi do tych protokołów. Pobieranie mojego pliku trochę trwa, ale to wina jego rozmiaru. Także jesteś wielki @Fizyda!