Last active
December 19, 2021 18:37
-
-
Save H0neyBadger/8d1ab88fe1655818fa4fe10e436ee5ea to your computer and use it in GitHub Desktop.
ps4 ps4_remote_pkg_installer gateway
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from time import sleep | |
from shutil import copyfileobj | |
import socket | |
from http import server, client, cookiejar | |
import urllib.request | |
from urllib.parse import urlparse | |
LISTEN_PORT = 8090 | |
TARGET = "http://gs2.ww.prod.dl.playstation.net" | |
class PS4Handler(server.SimpleHTTPRequestHandler): | |
protocol_version = "HTTP/1.1" | |
server_version = "CloudStorage" | |
sys_version = "" | |
def do_GET(self): | |
print("-------------------------------- START --------------------------------") | |
host = urlparse(TARGET).hostname | |
new_url = f"{TARGET}{self.path}" | |
new_headers = {} | |
for key, value in self.headers.items(): | |
print(f"Request Header[{key}:{value}]") | |
if key.lower() == "host": | |
# rewrite Host header | |
new_headers[key] = host | |
continue | |
# forward source header | |
new_headers[key] = value | |
print(self.__dict__) | |
cookie = cookiejar.CookieJar() | |
cookie_processor = urllib.request.HTTPCookieProcessor(cookie) | |
opener = urllib.request.build_opener(cookie_processor) | |
print("-------------------------------- REQUEST --------------------------------") | |
print(new_url, new_headers) | |
request = urllib.request.Request(new_url, headers=new_headers) | |
while True: | |
try: | |
response = opener.open(request) | |
break | |
except urllib.error.HTTPError as err: | |
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", err, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") | |
sleep(0.5) | |
print("-------------------------------- RESPONSE --------------------------------") | |
self.send_response(response.status) | |
length = None | |
for key, value in response.headers.items(): | |
print(f"Response Header[{key}:{value}]") | |
if key == "Date": | |
continue | |
if key == "Server": | |
continue | |
if key == "Content-Length": | |
length = int(value) | |
continue | |
self.send_header(key.strip(), value.strip()) | |
print(response.__dict__, response) | |
if response.headers["Content-Type"] == "application/json": | |
data = response.read() | |
server, port = self.wfile._sock.getsockname() | |
data = data.replace( | |
TARGET.encode("utf-8"), | |
f"http://{server}:{port}".encode("utf-8") | |
) | |
self.send_header("Content-Length", len(data)) | |
self.end_headers() | |
self.wfile.write(data) | |
print("-------------------------------- END --------------------------------") | |
return | |
if length is not None: | |
self.send_header("Content-Length", length) | |
self.end_headers() | |
try: | |
copyfileobj(response, self.wfile, 10*1024) | |
except Exception as err: | |
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", err, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") | |
response.close() | |
print("after", dir(self.wfile), self.wfile.__dict__) | |
print("-------------------------------- END --------------------------------") | |
addr = ('', LISTEN_PORT) | |
http = server.ThreadingHTTPServer(addr, PS4Handler) | |
http.serve_forever() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment