When I download the following file on my browsers (firefox & waterfox): https://launcher-public-service-prod06.ol.epicgames.com/launcher/api/installer/download/EpicGamesLauncherInstaller.msi?productName=unrealengine
.
It redirects to https://epicgames-download1.akamaized.net/Builds/UnrealEngineLauncher/Installers/Win32/EpicInstaller-7.14.2.msi?launcherfilename=EpicInstaller-7.14.2-unrealengine.msi
which then downloads the file.
But when I copy the curl command from firefox so I can download the file using curl, I get a 403 Forbidden from the host AkamaiGHost. I couldn't even download it using download manager programs.
This is the curl request I copied (from the firefox devtools):
curl "https://launcher-public-service-prod06.ol.epicgames.com/launcher/api/installer/download/EpicGamesLauncherInstaller.msi?productName=unrealengine" -H "User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Accept-Language: en-US,en;q=0.5" --compressed -H "DNT: 1" -H "Connection: keep-alive" -H "Upgrade-Insecure-Requests: 1"
And when I enable --verbose and --location (which allows redirects), I get the following output from curl:
* STATE: INIT => CONNECT handle 0x6000574d8; line 1407 (connection #-5000)
* Added connection 0. The cache now contains 1 members
* STATE: CONNECT => WAITRESOLVE handle 0x6000574d8; line 1443 (connection #0)
* Trying 35.169.251.130...
* TCP_NODELAY set
* STATE: WAITRESOLVE => WAITCONNECT handle 0x6000574d8; line 1524 (connection #0)
* Connected to launcher-public-service-prod06.ol.epicgames.com (35.169.251.130) port 443 (#0)
* STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x6000574d8; line 1576 (connection #0)
* Marked for [keep alive]: HTTP default
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /usr/ssl/certs/ca-bundle.crt
CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* STATE: SENDPROTOCONNECT => PROTOCONNECT handle 0x6000574d8; line 1590 (connection #0)
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=*.ol.epicgames.com
* start date: Mar 12 00:00:00 2018 GMT
* expire date: Apr 12 12:00:00 2019 GMT
* subjectAltName: host "launcher-public-service-prod06.ol.epicgames.com" matched cert's "*.ol.epicgames.com"
* issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon
* SSL certificate verify ok.
* STATE: PROTOCONNECT => DO handle 0x6000574d8; line 1611 (connection #0)
> GET /launcher/api/installer/download/EpicGamesLauncherInstaller.msi?productName=unrealengine HTTP/1.1
> Host: launcher-public-service-prod06.ol.epicgames.com
> Accept-Encoding: deflate, gzip
> User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> Accept-Language: en-US,en;q=0.5
> DNT: 1
> Connection: keep-alive
> Upgrade-Insecure-Requests: 1
>
* STATE: DO => DO_DONE handle 0x6000574d8; line 1673 (connection #0)
* STATE: DO_DONE => WAITPERFORM handle 0x6000574d8; line 1800 (connection #0)
* STATE: WAITPERFORM => PERFORM handle 0x6000574d8; line 1815 (connection #0)
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 303 See Other
< Date: Wed, 15 Aug 2018 00:31:34 GMT
< Location: https://epicgames-download1.akamaized.net/Builds/UnrealEngineLauncher/Installers/Win32/EpicInstaller-7.14.2.msi?launcherfilename=EpicInstaller-7.14.2-unrealengine.msi
< X-Epic-Correlation-ID: 8cf2e9aa-2945-43f3-8489-ed8c1b4f832b
< Content-Length: 0
< Connection: keep-alive
<
* multi_done
* Connection #0 to host launcher-public-service-prod06.ol.epicgames.com left intact
* Issue another request to this URL: 'https://epicgames-download1.akamaized.net/Builds/UnrealEngineLauncher/Installers/Win32/EpicInstaller-7.14.2.msi?launcherfilename=EpicInstaller-7.14.2-unrealengine.msi'
* STATE: PERFORM => CONNECT handle 0x6000574d8; line 1967 (connection #-5000)
* Added connection 1. The cache now contains 2 members
* STATE: CONNECT => WAITRESOLVE handle 0x6000574d8; line 1443 (connection #1)
* Trying 88.221.14.25...
* TCP_NODELAY set
* STATE: WAITRESOLVE => WAITCONNECT handle 0x6000574d8; line 1524 (connection #1)
* Connected to epicgames-download1.akamaized.net (88.221.14.25) port 443 (#1)
* STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x6000574d8; line 1576 (connection #1)
* Marked for [keep alive]: HTTP default
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /usr/ssl/certs/ca-bundle.crt
CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* STATE: SENDPROTOCONNECT => PROTOCONNECT handle 0x6000574d8; line 1590 (connection #1)
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-ECDSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: C=US; ST=Massachusetts; L=Cambridge; O=Akamai Technologies, Inc.; CN=a248.e.akamai.net
* start date: Jan 23 00:00:00 2018 GMT
* expire date: Jan 19 12:00:00 2019 GMT
* subjectAltName: host "epicgames-download1.akamaized.net" matched cert's "*.akamaized.net"
* issuer: C=US; O=DigiCert Inc; CN=DigiCert ECC Secure Server CA
* SSL certificate verify ok.
* STATE: PROTOCONNECT => DO handle 0x6000574d8; line 1611 (connection #1)
> GET /Builds/UnrealEngineLauncher/Installers/Win32/EpicInstaller-7.14.2.msi?launcherfilename=EpicInstaller-7.14.2-unrealengine.msi HTTP/1.1
> Host: epicgames-download1.akamaized.net
> Accept-Encoding: deflate, gzip
> User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> Accept-Language: en-US,en;q=0.5
> DNT: 1
> Connection: keep-alive
> Upgrade-Insecure-Requests: 1
>
* STATE: DO => DO_DONE handle 0x6000574d8; line 1673 (connection #1)
* STATE: DO_DONE => WAITPERFORM handle 0x6000574d8; line 1800 (connection #1)
* STATE: WAITPERFORM => PERFORM handle 0x6000574d8; line 1815 (connection #1)
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 403 Forbidden
* Server AkamaiGHost is not blacklisted
< Server: AkamaiGHost
< Mime-Version: 1.0
< Content-Type: text/html
< Content-Length: 391
< Expires: Wed, 15 Aug 2018 00:31:35 GMT
< Date: Wed, 15 Aug 2018 00:31:35 GMT
< Connection: keep-alive
< Content-Disposition: filename=EpicInstaller-7.14.2-unrealengine.msi
<
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
You don't have permission to access "http://epicgames-download1.akamaized.net/Builds/UnrealEngineLauncher/Installers/Win32/EpicInstaller-7.14.2.msi?" on this server.<P>
Reference #18.150edd58.1534293095.8f2cbe
</BODY>
</HTML>
* STATE: PERFORM => DONE handle 0x6000574d8; line 1986 (connection #1)
* multi_done
* Connection #1 to host epicgames-download1.akamaized.net left intact
* Expire cleared
What is going wrong?
curl -L
worked for me as well. Access Denied, are you sure you did not set any proxy for your web browser?curl
, without any options passed, ignores the Internet Options proxy (I use a bash terminal emulator for Windows), that will also give me a 403. But if I either: 1) pass-x
option with my proxy host:port tocurl
, or 2) enable my browser proxy addon, or 3) disable the addon, set the browser preferences to use system proxy, and then set the proxy in Internet Options, then it works normally. So the problem is solved now. Thanks!