suchen
HeimBackend-EntwicklungGolangERHALTEN VON CODE-EINGABEN DYNAMISCH IN GO

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.

FETCHING ADVENT OF CODE INPUTS DYNAMICALLY IN GO

  • Extrahieren Sie den Wert des Sitzungscookies.

FETCHING ADVENT OF CODE INPUTS DYNAMICALLY IN GO

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:

  1. 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))
  1. Ä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!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Golangs Auswirkungen: Geschwindigkeit, Effizienz und EinfachheitGolangs Auswirkungen: Geschwindigkeit, Effizienz und EinfachheitApr 14, 2025 am 12:11 AM

GoimpactsDevelopmentPositivyThroughSpeed, Effizienz und DiasMlitication.1) Geschwindigkeit: Gocompilesquickandrunseffiction, idealforlargeProjects

C und Golang: Wenn die Leistung von entscheidender Bedeutung istC und Golang: Wenn die Leistung von entscheidender Bedeutung istApr 13, 2025 am 12:11 AM

C eignet sich besser für Szenarien, in denen eine direkte Kontrolle der Hardware -Ressourcen und hohe Leistungsoptimierung erforderlich ist, während Golang besser für Szenarien geeignet ist, in denen eine schnelle Entwicklung und eine hohe Parallelitätsverarbeitung erforderlich sind. 1.Cs Vorteil liegt in den nahezu Hardware-Eigenschaften und hohen Optimierungsfunktionen, die für leistungsstarke Bedürfnisse wie die Spieleentwicklung geeignet sind. 2. Golangs Vorteil liegt in seiner präzisen Syntax und der natürlichen Unterstützung, die für die Entwicklung einer hohen Parallelitätsdienste geeignet ist.

Golang in Aktion: Beispiele und Anwendungen in realer WeltGolang in Aktion: Beispiele und Anwendungen in realer WeltApr 12, 2025 am 12:11 AM

Golang zeichnet sich in praktischen Anwendungen aus und ist für seine Einfachheit, Effizienz und Parallelität bekannt. 1) Die gleichzeitige Programmierung wird über Goroutinen und Kanäle implementiert, 2) Flexibler Code wird unter Verwendung von Schnittstellen und Polymorphismen geschrieben, 3) Vereinfachen Sie die Netzwerkprogrammierung mit NET/HTTP -Paketen, 4) Effiziente gleichzeitige Crawler erstellen, 5) Debuggen und Optimierung durch Tools und Best Practices.

Golang: Die Go -Programmiersprache erklärtGolang: Die Go -Programmiersprache erklärtApr 10, 2025 am 11:18 AM

Zu den Kernmerkmalen von GO gehören die Müllsammlung, statische Verknüpfung und Unterstützung der Parallelität. 1. Das Parallelitätsmodell von GO -Sprache realisiert eine effiziente gleichzeitige Programmierung durch Goroutine und Kanal. 2. Schnittstellen und Polymorphismen werden durch Schnittstellenmethoden implementiert, so dass verschiedene Typen einheitlich verarbeitet werden können. 3. Die grundlegende Verwendung zeigt die Effizienz der Funktionsdefinition und des Aufrufs. 4. In der fortgeschrittenen Verwendung bieten Scheiben leistungsstarke Funktionen der dynamischen Größenänderung. 5. Häufige Fehler wie Rassenbedingungen können durch Getest-Race erkannt und gelöst werden. 6. Leistungsoptimierung wiederverwenden Objekte durch Sync.Pool, um den Druck der Müllabfuhr zu verringern.

Golangs Zweck: Aufbau effizienter und skalierbarer SystemeGolangs Zweck: Aufbau effizienter und skalierbarer SystemeApr 09, 2025 pm 05:17 PM

Go Language funktioniert gut beim Aufbau effizienter und skalierbarer Systeme. Zu den Vorteilen gehören: 1. hohe Leistung: Kompiliert in den Maschinencode, schnelle Laufgeschwindigkeit; 2. gleichzeitige Programmierung: Vereinfachen Sie Multitasking durch Goroutinen und Kanäle; 3. Einfachheit: präzise Syntax, Reduzierung der Lern- und Wartungskosten; 4. plattform: Unterstützt die plattformübergreifende Kompilierung, einfache Bereitstellung.

Warum scheinen die Ergebnisse der Ordnung nach Aussagen in der SQL -Sortierung manchmal zufällig zu sein?Warum scheinen die Ergebnisse der Ordnung nach Aussagen in der SQL -Sortierung manchmal zufällig zu sein?Apr 02, 2025 pm 05:24 PM

Verwirrt über die Sortierung von SQL -Abfragenergebnissen. Während des Lernens von SQL stoßen Sie häufig auf einige verwirrende Probleme. Vor kurzem liest der Autor "Mick-SQL Basics" ...

Ist die Konvergenz für Technologiestapel nur ein Prozess der Technologie -Stapelauswahl?Ist die Konvergenz für Technologiestapel nur ein Prozess der Technologie -Stapelauswahl?Apr 02, 2025 pm 05:21 PM

Die Beziehung zwischen Technologiestapelkonvergenz und Technologieauswahl in der Softwareentwicklung, der Auswahl und dem Management von Technologiestapeln ist ein sehr kritisches Problem. In letzter Zeit haben einige Leser vorgeschlagen ...

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung