Heim > Backend-Entwicklung > Golang > ERHALTEN VON CODE-EINGABEN DYNAMISCH IN GO

ERHALTEN VON CODE-EINGABEN DYNAMISCH IN GO

Susan Sarandon
Freigeben: 2024-12-08 10:32:17
Original
193 Leute haben es durchsucht

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)
}
Nach dem Login kopieren
Nach dem Login kopieren
  • 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]")
Nach dem Login kopieren
Nach dem Login kopieren

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)
}
Nach dem Login kopieren
Nach dem Login kopieren

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]")
Nach dem Login kopieren
Nach dem Login kopieren

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
    }
Nach dem Login kopieren

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))
Nach dem Login kopieren
  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
}
Nach dem Login kopieren

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]"
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage