Genera y aplica cabeceras de Kasada con Go

Por solvethree3 min de lectura

Crea una KasadaTask y después envía el conjunto completo de cabeceras devueltas y la identidad del navegador a través del proxy que tuvo éxito. El SDK oficial de Go genera la solución; tu cliente net/http realiza la solicitud al destino. No se necesita ningún navegador local ni complemento.

En esta página

Configura y ejecuta el ejemplo de Go

Usa Go 1.22 o posterior e instala el módulo oficial solvethree.com/[email protected]. La documentación de integración de Go explica la instalación.

Kasada independiente admite actualmente destinos HTTPS en el nombre de host exacto www.ticketmaster.com. El ejemplo solicita su página de inicio; cambia input.URL por la URL prevista en ese host compatible.

  • Establece SOLVETHREE_API_KEY con la clave de API de tu espacio de trabajo. Mantenla en el servidor.
  • Establece SOLVETHREE_PROXY con la URL de un proxy HTTP o HTTPS sin ruta, consulta ni fragmento. Este ejemplo usa un solo proxy; no proporciones también ProxyCandidates.
  • Mantén Type establecido en KasadaTask. No añadas Site, Action, RecaptchaType, campos de sesión ni campos de identidad de navegador personalizados.
Go · aplicar el conjunto completo de cabeceras de Kasada
package main

import (
    "context"
    "fmt"
    "log"
    "os"
    "net/http"
    "net/url"
    "time"
    solvethree "solvethree.com/sdk"
)

func main() {
    client, err := solvethree.NewClient(os.Getenv("SOLVETHREE_API_KEY"), nil)
    if err != nil { log.Fatal(err) }
    ctx, cancel := context.WithTimeout(context.Background(), 180*time.Second)
    defer cancel()
    input := solvethree.TaskRequest{Type: "KasadaTask", URL: "https://www.ticketmaster.com/", Proxy: os.Getenv("SOLVETHREE_PROXY")}
    result, err := client.Solve(ctx, input, solvethree.SolveOptions{})
    if err != nil { log.Fatal(err) }
    fmt.Println("Ready task:", result.ID)

    proxy, ok := solvethree.SuccessfulProxy(input, result)
    if !ok { log.Fatal("No valid successful proxy") }
    proxyURL, err := url.Parse(proxy)
    if err != nil { log.Fatal(err) }
    transport := http.DefaultTransport.(*http.Transport).Clone()
    transport.Proxy = http.ProxyURL(proxyURL)
    defer transport.CloseIdleConnections()
    targetClient := &http.Client{Transport: transport, Timeout: 30*time.Second,
        CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
    request, err := http.NewRequestWithContext(ctx, "GET", input.URL, nil)
    if err != nil { log.Fatal(err) }

    request.Header.Set("User-Agent", result.Solution.UserAgent)
    request.Header.Set("sec-ch-ua", result.Solution.SecChUA)
    for name, value := range result.Solution.Headers { request.Header.Set(name, value) }

    response, err := targetClient.Do(request)
    if err != nil { log.Fatal(err) }
    defer response.Body.Close()
    fmt.Println("Application HTTP status:", response.StatusCode)
    // Inspect the application response to determine whether submission succeeded.

}

Mantén juntas las cabeceras, la identidad del navegador y el proxy

Para Kasada, aplica result.Solution.Headers, no Solution.Token. El bucle copia todas las cabeceras devueltas. Las asignaciones anteriores también aplican los valores UserAgent y SecChUA devueltos; no los sustituyas por valores de tu propio navegador.

SuccessfulProxy(input, result) identifica el proxy que tuvo éxito, y http.ProxyURL dirige la solicitud al destino a través de él. Usa ese resultado en lugar de elegir otro proxy al enviar. Esto también importa si más adelante cambias la tarea para usar candidatos de proxy.

La solicitud al destino usa input.URL, por lo que la resolución y el envío se dirigen a la misma URL. El seguimiento de redirecciones está desactivado: el cliente devuelve la respuesta de redirección en lugar de enviar automáticamente las cabeceras generadas a otra URL.

Comprueba la respuesta de la aplicación antes de dar la operación por exitosa

«Tarea lista» significa que se ha generado una solución, no que Ticketmaster la haya aceptado. El ejemplo imprime el estado HTTP de la aplicación, pero te corresponde interpretar la respuesta. Revisa el cuerpo de la respuesta y el resultado que esperaba tu aplicación antes de registrar la operación como exitosa.

La tarea está lista, pero el destino rechaza la solicitud.

Revisa la solicitud enviada: su URL, todas las cabeceras devueltas, User-Agent, sec-ch-ua y el proxy seleccionado por SuccessfulProxy.

Prueba esto: Corrige cualquier discrepancia antes de solicitar otra resolución. Una solución lista no garantiza la aceptación por parte del destino.

Solve devuelve un error antes de que se ejecute la solicitud al destino.

Distingue un error HTTP de la API de un fallo terminal de la tarea. Una tarea fallida incluye errorCode y error.

Prueba esto: Usa esos detalles para corregir la solicitud en lugar de reintentar con los mismos datos de entrada no válidos. Si sustituyes Solve por consultas manuales, deja de consultar cuando la tarea falle.

Consulta Gestión de errores de la API para los fallos durante la creación o la resolución de tareas.

Ejecuta tu primera tarea.

Empieza con $5 de crédito en tu espacio de trabajo.

Crear un espacio de trabajo
Genera y aplica cabeceras de Kasada con Go · solvethree