Gere e aplique cabeçalhos Kasada com Go
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_KEYcomo a chave de API do seu espaço de trabalho. Mantenha-a no servidor. - Defina
SOLVETHREE_PROXYcomo 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émProxyCandidates. - Mantenha
Typedefinido comoKasadaTask. Não adicioneSite,Action,RecaptchaType, campos de sessão ou de identidade personalizada do navegador.
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.
Fontes e referência da API
Execute sua primeira tarefa.
Comece com $5 em créditos no espaço de trabalho.