Stable URL for latest stable
-
I end up working on lots of different computers so I have some scripts to quickly set up a new computer. One of the things I'd like that script to do is install Vivaldi. But, as far as I can tell, there isn't a stable URL for the latest stable. For example, currently I'm using https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_amd64.deb but that includes the version in the URL. When I go to run this script again in a month that will no longer be the latest stable version.
Would it possible to add a stable URL that always points to the latest stable release (e.g. https://downloads.vivaldi.com/stable/vivaldi-latest.deb) for this kind of thing?
-
This post is deleted! -
Not at all required if you are scripting, then it is pretty trivial to do this. I can think off at least 5 different ways to work out the current version number off the top of my head. You might think this is my familiarity with Vivaldi but I do this on a whole bunch of sites for other software.
That said, what you ask for has existed for years
-
Here is a larger set
https://vivaldi.com/download/Vivaldi.x86.exe
https://vivaldi.com/download/Vivaldi.x64.exe
https://vivaldi.com/download/Vivaldi.dmg
https://vivaldi.com/download/vivaldi-stable_amd64.deb
https://vivaldi.com/download/vivaldi-stable_armhf.deb
https://vivaldi.com/download/vivaldi-stable_arm64.deb
https://vivaldi.com/download/vivaldi-stable.x86_64.rpm -
@Ruarí said in Stable URL for latest stable:
I can think off at least 5 different ways to work out the current version number off the top of my head.
P.S. One of those 5 ways is linked (albeit not obviously) off every single snapshot for years now.
Let's clean that up and try it
$ curl -s https://repo.vivaldi.com/archive/deb/dists/stable/main/binary-amd64/Packages.gz | gzip -d | grep -A6 -x "Package: vivaldi-stable" | sed -n 's/^Version: \(\([0-9]\+\.\)\{3\}[0-9]\+-[0-9]\+\)/\1/p' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -n 1 6.4.3160.44-1
[I shall leave the other possible ways… and there are probably more than 5 as an exercise for the reader.]
-
Very, very thanks! @Ruarí
-
You are welcome. Also sorry to oliverdain or anyone else who reads this and thinks my replies are a bit harsh in tone. Sorry about that, just a bit tired. Of course it is trivial if you know how already or do this often but that does not mean it is obvious to everyone. I see that… anyway the URLs should provide what you need.
-
@Ruarí said in Stable URL for latest stable:
my replies are a bit harsh in tone
It doesn't matter at all. Content is more valuable.
-
@Ruarí Please test them at this time, not all of them work, some show a 404 Error.
-
@DoctorG Let me throw that back at you. Which one(s) fail?
Every single one I listed above correctly redirects when checking from my work and home machines
ruario@ruario-slack:~$ curl -LI https://vivaldi.com/download/Vivaldi.x86.exe HTTP/2 303 date: Mon, 20 Nov 2023 11:18:26 GMT content-type: text/html; charset=UTF-8 location: https://downloads.vivaldi.com/stable/Vivaldi.6.4.3160.44.exe vary: Accept-Encoding, Cookie x-frame-options: SAMEORIGIN x-content-type-options: nosniff referrer-policy: no-referrer-when-downgrade content-security-policy: upgrade-insecure-requests permissions-policy: accelerometer=(), camera=(), encrypted-media=(), geolocation=(), gyroscope=(), microphone=(), browsing-topics=() x-xss-protection: 0 cf-cache-status: BYPASS server: cloudflare cf-ray: 82904ac9b907b51d-OSL alt-svc: h3=":443"; ma=86400 HTTP/2 200 server: nginx/1.18.0 (Ubuntu) content-type: application/octet-stream last-modified: Thu, 16 Nov 2023 13:04:25 GMT etag: "65561359-5e18390" expires: Fri, 15 Nov 2024 15:04:28 GMT cache-control: max-age=31536000 access-control-allow-headers: x-requested-with access-control-allow-methods: GET, HEAD, OPTIONS access-control-allow-origin: * via: 1.1 varnish, 1.1 varnish accept-ranges: bytes date: Mon, 20 Nov 2023 11:18:26 GMT age: 332037 x-served-by: cache-lcy-eglc8600079-LCY, cache-bma1624-BMA x-cache: MISS, HIT x-cache-hits: 0, 1 x-timer: S1700479106.092895,VS0,VE1 strict-transport-security: max-age=31557600 content-length: 98665360 ruario@ruario-slack:~$ curl -LI https://vivaldi.com/download/Vivaldi.x64.exe HTTP/2 303 date: Mon, 20 Nov 2023 11:18:37 GMT content-type: text/html; charset=UTF-8 location: https://downloads.vivaldi.com/stable/Vivaldi.6.4.3160.44.x64.exe vary: Accept-Encoding, Cookie x-frame-options: SAMEORIGIN x-content-type-options: nosniff referrer-policy: no-referrer-when-downgrade content-security-policy: upgrade-insecure-requests permissions-policy: accelerometer=(), camera=(), encrypted-media=(), geolocation=(), gyroscope=(), microphone=(), browsing-topics=() x-xss-protection: 0 cf-cache-status: BYPASS server: cloudflare cf-ray: 82904b149922b4eb-OSL alt-svc: h3=":443"; ma=86400 HTTP/2 200 server: nginx/1.18.0 (Ubuntu) content-type: application/octet-stream last-modified: Thu, 16 Nov 2023 13:04:26 GMT etag: "6556135a-68b4790" expires: Fri, 15 Nov 2024 15:04:17 GMT cache-control: max-age=31536000 access-control-allow-headers: x-requested-with access-control-allow-methods: GET, HEAD, OPTIONS access-control-allow-origin: * via: 1.1 varnish, 1.1 varnish accept-ranges: bytes date: Mon, 20 Nov 2023 11:18:37 GMT age: 332060 x-served-by: cache-lcy-eglc8600070-LCY, cache-bma1653-BMA x-cache: MISS, HIT x-cache-hits: 0, 1 x-timer: S1700479118.985913,VS0,VE1 strict-transport-security: max-age=31557600 content-length: 109791120 ruario@ruario-slack:~$ curl -LI https://vivaldi.com/download/Vivaldi.dmg HTTP/2 303 date: Mon, 20 Nov 2023 11:18:49 GMT content-type: text/html; charset=UTF-8 location: https://downloads.vivaldi.com/stable/Vivaldi.6.4.3160.44.universal.dmg vary: Accept-Encoding, Cookie x-frame-options: SAMEORIGIN x-content-type-options: nosniff referrer-policy: no-referrer-when-downgrade content-security-policy: upgrade-insecure-requests permissions-policy: accelerometer=(), camera=(), encrypted-media=(), geolocation=(), gyroscope=(), microphone=(), browsing-topics=() x-xss-protection: 0 cf-cache-status: BYPASS server: cloudflare cf-ray: 82904b5de85c712e-OSL alt-svc: h3=":443"; ma=86400 HTTP/2 200 server: nginx/1.18.0 (Ubuntu) content-type: application/octet-stream last-modified: Thu, 16 Nov 2023 13:04:36 GMT etag: "65561364-e162206" expires: Fri, 15 Nov 2024 16:17:59 GMT cache-control: max-age=31536000 access-control-allow-headers: x-requested-with access-control-allow-methods: GET, HEAD, OPTIONS access-control-allow-origin: * via: 1.1 varnish, 1.1 varnish accept-ranges: bytes date: Mon, 20 Nov 2023 11:18:49 GMT age: 327650 x-served-by: cache-lcy-eglc8600021-LCY, cache-bma1671-BMA x-cache: HIT, HIT x-cache-hits: 150, 1 x-timer: S1700479130.705606,VS0,VE1 strict-transport-security: max-age=31557600 content-length: 236331526 ruario@ruario-slack:~$ curl -LI https://vivaldi.com/download/vivaldi-stable_amd64.deb HTTP/2 303 date: Mon, 20 Nov 2023 11:19:04 GMT content-type: text/html; charset=UTF-8 location: https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_amd64.deb vary: Accept-Encoding, Cookie x-frame-options: SAMEORIGIN x-content-type-options: nosniff referrer-policy: no-referrer-when-downgrade content-security-policy: upgrade-insecure-requests permissions-policy: accelerometer=(), camera=(), encrypted-media=(), geolocation=(), gyroscope=(), microphone=(), browsing-topics=() x-xss-protection: 0 cf-cache-status: DYNAMIC server: cloudflare cf-ray: 82904bb23aefb517-OSL alt-svc: h3=":443"; ma=86400 HTTP/2 200 server: nginx/1.18.0 (Ubuntu) content-type: application/octet-stream last-modified: Thu, 16 Nov 2023 13:04:28 GMT etag: "6556135c-64c1958" expires: Mon, 18 Nov 2024 15:09:21 GMT cache-control: max-age=31536000 access-control-allow-headers: x-requested-with access-control-allow-methods: GET, HEAD, OPTIONS access-control-allow-origin: * via: 1.1 varnish, 1.1 varnish accept-ranges: bytes date: Mon, 20 Nov 2023 11:19:04 GMT age: 72582 x-served-by: cache-lcy-eglc8600055-LCY, cache-bma1651-BMA x-cache: HIT, HIT x-cache-hits: 14, 1 x-timer: S1700479144.326661,VS0,VE1 strict-transport-security: max-age=31557600 content-length: 105650520 ruario@ruario-slack:~$ curl -LI https://vivaldi.com/download/vivaldi-stable_armhf.deb HTTP/2 303 date: Mon, 20 Nov 2023 11:19:16 GMT content-type: text/html; charset=UTF-8 location: https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_armhf.deb vary: Accept-Encoding, Cookie x-frame-options: SAMEORIGIN x-content-type-options: nosniff referrer-policy: no-referrer-when-downgrade content-security-policy: upgrade-insecure-requests permissions-policy: accelerometer=(), camera=(), encrypted-media=(), geolocation=(), gyroscope=(), microphone=(), browsing-topics=() x-xss-protection: 0 cf-cache-status: DYNAMIC server: cloudflare cf-ray: 82904c047b4d5691-OSL alt-svc: h3=":443"; ma=86400 HTTP/2 200 server: nginx/1.18.0 (Ubuntu) content-type: application/octet-stream last-modified: Thu, 16 Nov 2023 13:04:40 GMT etag: "65561368-60462fc" expires: Fri, 15 Nov 2024 16:17:59 GMT cache-control: max-age=31536000 access-control-allow-headers: x-requested-with access-control-allow-methods: GET, HEAD, OPTIONS access-control-allow-origin: * via: 1.1 varnish, 1.1 varnish accept-ranges: bytes date: Mon, 20 Nov 2023 11:19:16 GMT age: 327677 x-served-by: cache-lcy-eglc8600029-LCY, cache-bma1632-BMA x-cache: MISS, HIT x-cache-hits: 0, 1 x-timer: S1700479156.414260,VS0,VE1 strict-transport-security: max-age=31557600 content-length: 100950780 ruario@ruario-slack:~$ curl -LI https://vivaldi.com/download/vivaldi-stable_arm64.deb HTTP/2 303 date: Mon, 20 Nov 2023 11:19:26 GMT content-type: text/html; charset=UTF-8 location: https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_arm64.deb vary: Accept-Encoding, Cookie x-frame-options: SAMEORIGIN x-content-type-options: nosniff referrer-policy: no-referrer-when-downgrade content-security-policy: upgrade-insecure-requests permissions-policy: accelerometer=(), camera=(), encrypted-media=(), geolocation=(), gyroscope=(), microphone=(), browsing-topics=() x-xss-protection: 0 cf-cache-status: DYNAMIC server: cloudflare cf-ray: 82904c456ebc56a2-OSL alt-svc: h3=":443"; ma=86400 HTTP/2 200 server: nginx/1.18.0 (Ubuntu) content-type: application/octet-stream last-modified: Thu, 16 Nov 2023 13:04:42 GMT etag: "6556136a-5faa408" expires: Fri, 15 Nov 2024 14:46:12 GMT cache-control: max-age=31536000 access-control-allow-headers: x-requested-with access-control-allow-methods: GET, HEAD, OPTIONS access-control-allow-origin: * via: 1.1 varnish, 1.1 varnish accept-ranges: bytes date: Mon, 20 Nov 2023 11:19:26 GMT age: 333194 x-served-by: cache-lcy-eglc8600079-LCY, cache-bma1630-BMA x-cache: MISS, HIT x-cache-hits: 0, 1 x-timer: S1700479167.749858,VS0,VE1 strict-transport-security: max-age=31557600 content-length: 100312072 ruario@ruario-slack:~$ curl -LI https://vivaldi.com/download/vivaldi-stable.x86_64.rpm HTTP/2 303 date: Mon, 20 Nov 2023 11:19:38 GMT content-type: text/html; charset=UTF-8 location: https://downloads.vivaldi.com/stable/vivaldi-stable-6.4.3160.44-1.x86_64.rpm vary: Accept-Encoding, Cookie x-frame-options: SAMEORIGIN x-content-type-options: nosniff referrer-policy: no-referrer-when-downgrade content-security-policy: upgrade-insecure-requests permissions-policy: accelerometer=(), camera=(), encrypted-media=(), geolocation=(), gyroscope=(), microphone=(), browsing-topics=() x-xss-protection: 0 cf-cache-status: DYNAMIC server: cloudflare cf-ray: 82904c901ee356a8-OSL alt-svc: h3=":443"; ma=86400 HTTP/2 200 server: nginx/1.18.0 (Ubuntu) content-type: application/x-redhat-package-manager last-modified: Thu, 16 Nov 2023 13:04:30 GMT etag: "6556135e-65c4f69" expires: Fri, 15 Nov 2024 16:17:59 GMT cache-control: max-age=31536000 access-control-allow-headers: x-requested-with access-control-allow-methods: GET, HEAD, OPTIONS access-control-allow-origin: * via: 1.1 varnish, 1.1 varnish accept-ranges: bytes date: Mon, 20 Nov 2023 11:19:38 GMT age: 327699 x-served-by: cache-lcy-eglc8600048-LCY, cache-bma1644-BMA x-cache: HIT, HIT x-cache-hits: 67, 1 x-timer: S1700479179.755921,VS0,VE1 strict-transport-security: max-age=31557600 content-length: 106712937
-
@DoctorG Here is a second test, using wget to follow every link and check those in turn. Still not a single 404.
Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:28-- https://vivaldi.com/download/Vivaldi.x86.exe Resolving vivaldi.com (vivaldi.com)... 172.67.21.227, 104.22.59.199, 104.22.58.199, ... Connecting to vivaldi.com (vivaldi.com)|172.67.21.227|:443... connected. HTTP request sent, awaiting response... 303 See Other Location: https://downloads.vivaldi.com/stable/Vivaldi.6.4.3160.44.exe [following] Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:28-- https://downloads.vivaldi.com/stable/Vivaldi.6.4.3160.44.exe Resolving downloads.vivaldi.com (downloads.vivaldi.com)... 151.101.2.137, 151.101.194.137, 151.101.66.137, ... Connecting to downloads.vivaldi.com (downloads.vivaldi.com)|151.101.2.137|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 98665360 (94M) [application/octet-stream] Remote file exists. Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:28-- https://vivaldi.com/download/Vivaldi.x64.exe Connecting to vivaldi.com (vivaldi.com)|172.67.21.227|:443... connected. HTTP request sent, awaiting response... 303 See Other Location: https://downloads.vivaldi.com/stable/Vivaldi.6.4.3160.44.x64.exe [following] Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:29-- https://downloads.vivaldi.com/stable/Vivaldi.6.4.3160.44.x64.exe Connecting to downloads.vivaldi.com (downloads.vivaldi.com)|151.101.2.137|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 109791120 (105M) [application/octet-stream] Remote file exists. Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:29-- https://vivaldi.com/download/Vivaldi.dmg Connecting to vivaldi.com (vivaldi.com)|172.67.21.227|:443... connected. HTTP request sent, awaiting response... 303 See Other Location: https://downloads.vivaldi.com/stable/Vivaldi.6.4.3160.44.universal.dmg [following] Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:29-- https://downloads.vivaldi.com/stable/Vivaldi.6.4.3160.44.universal.dmg Connecting to downloads.vivaldi.com (downloads.vivaldi.com)|151.101.2.137|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 236331526 (225M) [application/octet-stream] Remote file exists. Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:29-- https://vivaldi.com/download/vivaldi-stable_amd64.deb Connecting to vivaldi.com (vivaldi.com)|172.67.21.227|:443... connected. HTTP request sent, awaiting response... 303 See Other Location: https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_amd64.deb [following] Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:30-- https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_amd64.deb Connecting to downloads.vivaldi.com (downloads.vivaldi.com)|151.101.2.137|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 105650520 (101M) [application/octet-stream] Remote file exists. Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:30-- https://vivaldi.com/download/vivaldi-stable_armhf.deb Connecting to vivaldi.com (vivaldi.com)|172.67.21.227|:443... connected. HTTP request sent, awaiting response... 303 See Other Location: https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_armhf.deb [following] Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:30-- https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_armhf.deb Connecting to downloads.vivaldi.com (downloads.vivaldi.com)|151.101.2.137|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 100950780 (96M) [application/octet-stream] Remote file exists. Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:30-- https://vivaldi.com/download/vivaldi-stable_arm64.deb Connecting to vivaldi.com (vivaldi.com)|172.67.21.227|:443... connected. HTTP request sent, awaiting response... 303 See Other Location: https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_arm64.deb [following] Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:31-- https://downloads.vivaldi.com/stable/vivaldi-stable_6.4.3160.44-1_arm64.deb Connecting to downloads.vivaldi.com (downloads.vivaldi.com)|151.101.2.137|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 100312072 (96M) [application/octet-stream] Remote file exists. Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:31-- https://vivaldi.com/download/vivaldi-stable.x86_64.rpm Connecting to vivaldi.com (vivaldi.com)|172.67.21.227|:443... connected. HTTP request sent, awaiting response... 303 See Other Location: https://downloads.vivaldi.com/stable/vivaldi-stable-6.4.3160.44-1.x86_64.rpm [following] Spider mode enabled. Check if remote file exists. --2023-11-20 12:24:31-- https://downloads.vivaldi.com/stable/vivaldi-stable-6.4.3160.44-1.x86_64.rpm Connecting to downloads.vivaldi.com (downloads.vivaldi.com)|151.101.2.137|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 106712937 (102M) [application/x-redhat-package-manager] Remote file exists.
-
OMG! The Webmasters Hell of HTTP content-negotiation hits your download servers!
Example: https://vivaldi.com/download/Vivaldi.x64.exe in address field redirects to https://vivaldi.com/de/download/Vivaldi.x64.exe
Now it is https://vivaldi.com/download/Vivaldi.x86.exe//edit: will be fixed by Vivaldi server admin
-
@DoctorG Yes, I discovered during testing yesterday that if you copy a link and paste it into the address bar, it will automatically redirect to a link that is consistent with the browser's current language setting, that is, a directory representing the language name will be inserted.
-
@Aaron Default download links are fixed now.
-
@DoctorG , I am surprised to discover today that the "simpler" URLs existed since years ago! I never heard about them, unfortunately. Are they talked about anywhere? Where they mentioned in any conversation or discussion, after their creation?
I just created a feature request about it (https://forum.vivaldi.net/topic/96174/unique-download-urls-for-the-current-versions)... I hope my thread is not closed or hidden, since it mentions a few details that do not seem to exist yet, and I think they can be good. I will let their discussion happen there, anyway - I hope you or any other Vivaldi Team member do not mind.