Advent of Code ist eine unterhaltsame Möglichkeit für Programmierer, ihre Fähigkeiten zur Problemlösung zu testen und zu verbessern. Während Sie die Rätsel lösen, möchten Sie möglicherweise den Abruf Ihrer personalisierten Rätseleingabe direkt über die URL automatisieren, anstatt die Eingabe in eine Textdatei zu kopieren, die lokal verfügbar ist. Der Versuch, über eine einfache HTTP-Anfrage auf die Eingabe-URL zuzugreifen, führt jedoch zu der folgenden Meldung:
Puzzle-Eingaben unterscheiden sich je nach Benutzer. Bitte melden Sie sich an, um Ihre Rätseleingabe zu erhalten.
In diesem Artikel wird erläutert, warum dies geschieht und wie Sie Ihre Eingaben mithilfe der Programmiersprache Go dynamisch korrekt abrufen.
Das Problem: Warum können wir die Eingabe nicht direkt abrufen?
Für Advent of Code müssen Sie sich anmelden, um auf Ihre personalisierten Puzzle-Eingaben zugreifen zu können. Wenn Sie sich über den Browser anmelden, setzt Advent of Code ein Sitzungscookie in Ihrem Browser. Dieses Cookie wird verwendet, um Ihr Konto zu identifizieren und Ihre eindeutige Eingabe bereitzustellen.
Wenn Ihre HTTP-Anfragen dieses Sitzungscookie nicht enthalten, kann der Advent of Code-Server Sie nicht als angemeldeten Benutzer erkennen, daher die Fehlermeldung.
Lösung: Verwendung des Sitzungscookies in HTTP-Anfragen
Wir müssen das Sitzungscookie in unsere HTTP-Anfragen einbinden, um die Puzzle-Eingabe abzurufen. Hier ist eine Schritt-für-Schritt-Anleitung:
Melden Sie sich bei Advent of Code an.
Öffnen Sie die Entwicklertools Ihres Browsers (drücken Sie die Taste F12) und navigieren Sie zur Registerkarte „Netzwerk“.
Aktualisieren Sie die Seite „Advent of Code“ und suchen Sie in den Anforderungsheadern nach dem Cookie-Header.
- Extrahieren Sie den Wert des Sitzungscookies.
HINWEIS: Es ist wichtig, dass Sie Ihr Sitzungscookie geheim halten, da jemand anderes auf Ihr Advent of Code-Konto zugreifen kann, wenn er Zugriff darauf erhält.
Code zum Abrufen der Eingabe
Unten ist ein einfaches Programm, mit dem wir unsere Puzzle-Eingabe dynamisch abrufen:
- Einrichten der Basis-URL
Wir beginnen mit der Definition der Basis-URL zum Abrufen von Eingaben und der Erstellung einer Funktion zum Lesen der Eingaben für einen bestimmten Tag.
const baseURL = "https://adventofcode.com/2024/day/%s/input" func readInput(day string) { url := fmt.Sprintf(baseURL, day) fmt.Println(url) }
- Erstellen der HTTP-Anfrage
Als nächstes erstellen wir eine HTTP-Anfrage und fügen das Sitzungscookie ein.
client := &http.Client{} req, err := http.NewRequest("GET", url, nil) if err != nil { fmt.Printf("Error creating HTTP request: %v\n", err) return } // Add the session cookie req.Header.Add("Cookie", "session=[YOUR_SESSION_TOKEN]")
http.NewRequest: Erstellt eine HTTP-GET-Anfrage für die Eingabe-URL.
req.Header.Add: Fügt der Anfrage einen Header mit dem Sitzungstoken zur Authentifizierung hinzu. (Ersetzen Sie [YOUR_SESSION_TOKEN] durch Ihr tatsächliches Token.
- Senden der Anfrage und Bearbeiten der Antwort
Jetzt senden wir die HTTP-Anfrage und lesen die Antwort des Servers.
const baseURL = "https://adventofcode.com/2024/day/%s/input" func readInput(day string) { url := fmt.Sprintf(baseURL, day) fmt.Println(url) }
client.Do(req): Sendet die HTTP-Anfrage und speichert die Antwort.
defer resp.Body.Close(): Stellt sicher, dass der Antworttext nach dem Lesen geschlossen wird.
resp.StatusCode: Überprüft den HTTP-Statuscode. Ein anderer Code als 200 weist auf einen Fehler hin.
- Eingabe lesen und drucken
Schließlich lesen wir den Antworttext und drucken die Puzzle-Eingabe aus.
client := &http.Client{} req, err := http.NewRequest("GET", url, nil) if err != nil { fmt.Printf("Error creating HTTP request: %v\n", err) return } // Add the session cookie req.Header.Add("Cookie", "session=[YOUR_SESSION_TOKEN]")
io.ReadAll(resp.Body): Liest den Antworttext.
string(body): Konvertiert den Body von einem Byte-Slice in einen String zur einfachen Anzeige.
- Definieren der Hauptfunktion
Wir rufen die readInput-Funktion der Hauptfunktion auf, um die Eingabe für Tag 1 abzurufen.
resp, err := client.Do(req) if err != nil { fmt.Printf("Error making HTTP request: %v\n", err) return } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { fmt.Printf("Unexpected HTTP status: %d\n", resp.StatusCode) return }
Verbesserung der Sicherheit
Das Festcodieren des Sitzungstokens in unserem Code ist nicht sicher. Stattdessen sollten wir es als Umgebungsvariable speichern, indem wir die folgenden Schritte ausführen:
- Exportieren Sie das Sitzungstoken über das Terminal:
body, err := io.ReadAll(resp.Body) if err != nil { fmt.Printf("Error reading response body: %v\n", err) return } fmt.Println(string(body))
- Ändern Sie den Code, um das Sitzungstoken aus der Umgebungsvariablen zu lesen. (Stellen Sie sicher, dass Ihre Importe „os“ enthalten):
func main() { readInput("1") // Fetches input puzzle for day 1 }
Dies trägt dazu bei, dass das Sitzungstoken außerhalb des Quellcodes bleibt, wodurch das Risiko einer versehentlichen Offenlegung verringert wird.
- Vollständiger Programmcode
Hier ist das komplette Programm als Referenz:
export AOC_SESSION="[YOUR_SESSION_TOKEN]"
Dinge, die Sie beachten sollten
Sitzungsablauf: Sitzungstoken können nach einer Weile ablaufen. Wenn Sie auf Probleme stoßen, melden Sie sich erneut an und rufen Sie ein neues Token ab.
Datenschutz: Teilen Sie Ihr Sitzungstoken niemals öffentlich, auch nicht in Blog-Beiträgen oder GitHub-Repositories.
Fazit
Sie können Ihre Advent of Code-Eingaben dynamisch abrufen, indem Sie Ihr Sitzungscookie in HTTP-Anfragen einbinden.
Teilen Sie Ihre Tipps gerne mit uns oder stellen Sie Fragen im Kommentarbereich. Viel Spaß beim Codieren und viel Glück bei Advent of Code 2024!
Das obige ist der detaillierte Inhalt vonERHALTEN VON CODE-EINGABEN DYNAMISCH IN GO. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Dieser Artikel erläutert die Paketimportmechanismen von Go: benannte Importe (z. B. importieren & quot; fmt & quot;) und leere Importe (z. B. Import _ & quot; fmt & quot;). Benannte Importe machen Paketinhalte zugänglich, während leere Importe nur T ausführen

In diesem Artikel werden die Newflash () -Funktion von BeEGO für die Übertragung zwischen PAGE in Webanwendungen erläutert. Es konzentriert sich auf die Verwendung von Newflash (), um temporäre Nachrichten (Erfolg, Fehler, Warnung) zwischen den Controllern anzuzeigen und den Sitzungsmechanismus zu nutzen. Limita

Dieser Artikel beschreibt die effiziente Konvertierung von MySQL -Abfrageergebnissen in GO -Strukturscheiben. Es wird unter Verwendung der SCAN -Methode von Datenbank/SQL zur optimalen Leistung hervorgehoben, wobei die manuelle Parsen vermieden wird. Best Practices für die Struktur -Feldzuordnung mithilfe von DB -Tags und Robus

Dieser Artikel zeigt, dass Mocks und Stubs in GO für Unit -Tests erstellen. Es betont die Verwendung von Schnittstellen, liefert Beispiele für Mock -Implementierungen und diskutiert Best Practices wie die Fokussierung von Mocks und die Verwendung von Assertion -Bibliotheken. Die Articl

In diesem Artikel werden die benutzerdefinierten Typ -Einschränkungen von GO für Generika untersucht. Es wird beschrieben, wie Schnittstellen die minimalen Typanforderungen für generische Funktionen definieren und die Sicherheitstypsicherheit und die Wiederverwendbarkeit von Code verbessern. Der Artikel erörtert auch Einschränkungen und Best Practices

Dieser Artikel beschreibt effizientes Dateischreiben in Go und vergleicht OS.WriteFile (geeignet für kleine Dateien) mit OS.openfile und gepufferter Schreibvorgänge (optimal für große Dateien). Es betont eine robuste Fehlerbehandlung, die Verwendung von Aufschub und Überprüfung auf bestimmte Fehler.

In dem Artikel werden Schreiben von Unit -Tests in GO erörtert, die Best Practices, Spottechniken und Tools für ein effizientes Testmanagement abdecken.

In diesem Artikel wird die Verwendung von Tracing -Tools zur Analyse von GO -Anwendungsausführungsfluss untersucht. Es werden manuelle und automatische Instrumentierungstechniken, den Vergleich von Tools wie Jaeger, Zipkin und Opentelemetrie erörtert und die effektive Datenvisualisierung hervorheben


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

Dreamweaver Mac
Visuelle Webentwicklungstools

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.
