Gere e aplique cabeçalhos Kasada com Go

Por solvethree3 min de leitura

Crie uma KasadaTask e depois envie o conjunto completo de cabeçalhos retornados e a identidade do navegador pelo proxy bem-sucedido. O SDK Go oficial gera a solução; seu cliente net/http faz a requisição ao destino. Não é necessário navegador local nem plugin.

Nesta página

Configure e execute o exemplo em Go

Use Go 1.22 ou posterior e instale o módulo oficial em solvethree.com/[email protected]. A documentação de integração com Go aborda a instalação.

O Kasada independente atualmente oferece suporte a destinos HTTPS no hostname exato www.ticketmaster.com. O exemplo solicita a página inicial; altere input.URL para a URL desejada nesse host compatível.

  • Defina SOLVETHREE_API_KEY como a chave de API do seu espaço de trabalho. Mantenha-a no servidor.
  • Defina SOLVETHREE_PROXY como uma URL de proxy HTTP ou HTTPS sem caminho, parâmetros de consulta ou fragmento. Este exemplo usa um único proxy; não forneça também ProxyCandidates.
  • Mantenha Type definido como KasadaTask. Não adicione Site, Action, RecaptchaType, campos de sessão ou de identidade personalizada do navegador.
Go · aplicar o conjunto completo de cabeçalhos 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.

}

Mantenha os cabeçalhos, a identidade do navegador e o proxy juntos

Para Kasada, aplique result.Solution.Headers, não Solution.Token. O laço copia todos os cabeçalhos retornados. As atribuições anteriores também aplicam o UserAgent e o SecChUA retornados; não os substitua por valores do seu próprio navegador.

SuccessfulProxy(input, result) identifica o proxy bem-sucedido, e http.ProxyURL encaminha a requisição ao destino por ele. Use esse resultado em vez de escolher outro proxy no momento do envio. Isso também importa se você depois mudar a tarefa para usar candidatos a proxy.

A requisição ao destino usa input.URL, portanto a resolução e o envio se referem à mesma URL. O acompanhamento de redirecionamentos está desativado: o cliente retorna a resposta de redirecionamento em vez de enviar automaticamente os cabeçalhos gerados para outra URL.

Verifique a resposta da aplicação antes de considerar a operação bem-sucedida

“Tarefa pronta” significa que uma solução foi gerada, não que o Ticketmaster a aceitou. O exemplo imprime o status HTTP da aplicação, mas deixa a interpretação da resposta a seu critério. Inspecione o corpo da resposta e o resultado esperado pela sua aplicação antes de registrar o sucesso.

A tarefa está pronta, mas o destino rejeita a requisição.

Inspecione a requisição enviada: sua URL, todos os cabeçalhos retornados, User-Agent, sec-ch-ua e o proxy selecionado por SuccessfulProxy.

Experimente: Corrija qualquer divergência antes de solicitar outra resolução. Uma solução pronta não garante a aceitação pelo destino.

Solve retorna um erro antes de a requisição ao destino ser executada.

Diferencie um erro HTTP da API de uma falha terminal da tarefa. Uma tarefa com falha inclui errorCode e error.

Experimente: Use esses detalhes para corrigir a requisição em vez de tentar novamente com as mesmas entradas inválidas. Se substituir Solve por consultas manuais, pare de consultar quando a tarefa falhar.

Consulte Tratamento de erros da API para falhas durante a criação ou a resolução de tarefas.

Execute sua primeira tarefa.

Comece com $5 em créditos no espaço de trabalho.

Criar um espaço de trabalho
Gere e aplique cabeçalhos Kasada com Go · solvethree