Use um cookie TMPT do Ticketmaster com Go
Use Solution.Token como o valor de um cookie chamado tmpt. Envie a requisição ao destino pelo proxy bem-sucedido com a identidade do navegador retornada. O SDK obtém a solução; seu cliente HTTP Go a envia.
Nesta página
Escolha a ação e a URL exata de destino
Crie uma TaskRequest com Type definido como TicketmasterTmptTask, uma URL de destino, uma Action e uma entrada de proxy.
- Para um evento, use
Evente a URL exata do evento que você pretende solicitar. - Para fazer login, use
Logine a URL de entrada do fluxo de login.
Não envie Site, RecaptchaType nem um campo de sessão. TMPT retorna um valor bruto de cookie, não um token reCAPTCHA nem um objeto de cabeçalhos Kasada.
Resolva e depois envie a requisição ao destino
Use Go 1.22 ou posterior e o módulo oficial solvethree.com/sdk na versão v0.1.0. Os detalhes de instalação estão na documentação de integração com Go. Defina SOLVETHREE_API_KEY como a chave do seu espaço de trabalho e SOLVETHREE_PROXY como a URL do seu proxy. Mantenha a chave de API no servidor.
O exemplo usa Login. Para um evento, altere Action para Event e substitua URL pela URL exata do evento antes da resolução. Para login, confirme que URL é a URL de entrada do fluxo de login desejado. O GET posterior usa essa mesma input.URL.
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: "TicketmasterTmptTask", URL: "https://www.ticketmaster.com/", Action: "Login", 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)
request.AddCookie(&http.Cookie{Name: "tmpt", Value: result.Solution.Token})
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.
}SuccessfulProxy seleciona o proxy a usar no envio. O exemplo configura esse proxy em um http.Transport clonado, copia Solution.UserAgent e Solution.SecChUA para os cabeçalhos da requisição e anexa Solution.Token como o cookie tmpt. Não substitua esses valores por uma identidade de navegador sem relação com a solução nem troque de proxy entre a resolução e o envio.
Inspecione a resposta da aplicação
Os dois valores impressos respondem a perguntas diferentes: o ID da tarefa pronta identifica a solução gerada; o status HTTP da aplicação vem da requisição ao destino. Inspecione tanto o corpo da resposta quanto o status. Uma tarefa pronta não comprova login, acesso ao evento ou entrada na fila.
O acompanhamento de redirecionamentos está desativado no exemplo, para que você possa inspecionar a resposta inicial e seu cabeçalho Location em vez de ver apenas o destino final.
- A tarefa está pronta, mas o destino rejeita a requisição.
Inspecione o cookie enviado, a URL de destino, o proxy, User-Agent e sec-ch-ua.
Experimente: Envie o valor bruto de Solution.Token como tmpt para a URL desejada, usando SuccessfulProxy e a identidade retornada com essa solução.
- A resolução falha antes do GET ao destino.
Trate o erro de Solve. Para uma tarefa com falha terminal, inspecione errorCode e error.
Experimente: Pare de consultar essa tarefa e corrija o problema informado antes de tentar novamente. Não presuma que toda falha significa crédito insuficiente.
Fontes e referência da API
Execute sua primeira tarefa.
Comece com $5 em créditos no espaço de trabalho.