Hallo zusammen,
dieser Beitrag ist primär an diejenigen Spieler gerichtet, die - wie meine Wenigkeit - viel mit ComputerCraft
arbeiten.
Viele von Euch werden höchstwahrscheinlich das im OS integrierte "pastebin"-Programm verwenden. Dies hat
gute Gründe: Zum einen ist das "edit"-Programm absolut teuflisch und wenig produktiv; das Arbeiten mit
externen Quelltext-Editoren ist wesentlich angenehmer. Zum anderen kann man so immer eine Backup-Kopie
der Programme auf seinem eigenen Computer haben, falls man ausversehen den Computer-Block abbaut oder
gewisse Server-Backups nicht mehr zugreifbar sind
Leider wird diese Erleichterung ab dem 1. März 2018 nicht mehr funktionieren, denn die Pastebin-API,
auf welche das "pastebin"-Programm intern zugreift, wird ab diesem Datum nur noch auf HTTPS-Requests
antworten. (Siehe Angang oder https://pastebin.com/api). In der CC Version 1.4 sind die internen Methoden
"http.post()" und "http.get()" jedoch noch nicht in der Lage HTTPS zu verwenden. Das Programm wird also
in der jetzigen Form nicht mehr korrekt arbeiten.
Wie der Titel jedoch verspricht habe ich eine Lösung gefunden, die ich Euch nun präsentieren möchte. Die
"http.request()"-Methode kann nämlich sehr wohl HTTPS verwenden, das "pastebin"-Programm ist also
anpassbar. Wäre die Lösung so einfach dass man nur die Methodennamen ersetzen müsste hätte ich diesen
Beitrag nicht verfasst; es steckt noch ein wenig mehr dahinter als es scheint.
Meine Lösung ist ein "Fixer"-Programm, welches das im OS versteckte "pastebin"-Programm ausliest, dessen
Code abändert, und als eigenes "pastebin"-Programm abspeichert, sodass die Variante aus dem OS
überschrieben wird. Der Code ist hier zu finden:
- read_file = fs.open("rom/programs/http/pastebin", "r")code = read_file.readAll()read_file.close()code = code:gsub("local response = http.post", "http.request")code = code:gsub("local response = http.get", "http.request")code = code:gsub("http:", "https:")code = code:gsub("if response then", "local event, url, response = os.pullEvent(); if (event==\"http_success\") then ")write_file = fs.open("pastebin", "w")write_file.write(code)write_file.close()
"Ja super. Soll ich den Code jetzt jedes mal abschreiben wenn ich mit Pastebin interagieren will?"
Natürlich nicht. Deswegen habe ich diesen Beitrag mit genügend Spielraum verfasst damit ihr euch im
Voraus gelabelte Computer/Disketten/o.ä. anlegen könnt. Alternativ habe ich noch eine "min"-Version im
Angebot, damit man so wenige wie möglich Zeichen setzen muss. Dieser Code sorgt für das identische
Ergebnis, ist aber nur 286 Zeichen lang:
Ich hoffe ich konnte Euch auf das Problem aufmerksam machen und eine zufriedenstellende Lösung präsentieren,
Fragen & Anmerkungen können hierunter gerne formuliert werden.
MFG Qivex
PS: Ich weiß nicht inwiefern man das Problem auch lösen kann, indem serverseitig das OS verändert wird.
Nur als Vorschlag
PPS: Wenn ihr diesen Beitrag als sinnvoll erachtet dürft ihr ihn auch in den Thread "Tutorials" verschieben