cURL ile Kasada üstbilgileri oluşturun

solvethree tarafından3 dk okuma

Bir KasadaTask oluşturun, ready durumunu bekleyin, ardından solution.headers nesnesinin tamamını döndürülen tarayıcı kimliğiyle aynı proxy üzerinden gönderin. Bağımsız Kasada şu anda www.ticketmaster.com üzerindeki HTTPS hedeflerini destekler.

Bu sayfada

cURL ile oluşturun, durumu sorgulayın ve gönderin

Betik için Bash, cURL 7.76 veya üzeri, jq ve openssl gerekir. SOLVETHREE_API_KEY değerini çalışma alanınızın API anahtarı, SOLVETHREE_PROXY değerini ise HTTP veya HTTPS proxy URL'niz olarak ayarlayın. API anahtarını sunucu tarafında tutun ve kabuk komut izlemeyi kapalı bırakın.

Bu örnek, tüm akış boyunca tek bir proxy kullanır. Kasada isteği type, url ve proxy veya proxyCandidates alanlarından tam olarak birini gerektirir; site veya action gibi reCAPTCHA alanları, session ya da özel tarayıcı kimliği alanları içermemelidir. Kasada istek sözleşmesine bakın.

KASADA · oluşturma, durum sorgulama ve sonucu uygulama
#!/usr/bin/env bash
set -euo pipefail
: "${SOLVETHREE_API_KEY:?Set the API key}" "${SOLVETHREE_PROXY:?Set the proxy}"
# Requires bash, curl, jq and openssl. Do not enable shell tracing.
work=$(mktemp -d)
chmod 700 "$work"
trap 'rm -rf "$work"' EXIT
request_id=$(openssl rand -hex 16)
printf 'Recovery requestId=%s\n' "$request_id"
printf 'Authorization: Bearer %s\n' "$SOLVETHREE_API_KEY" > "$work/auth"
jq -n --arg proxy "$SOLVETHREE_PROXY" --arg id "$request_id" '{"type":"KasadaTask","url":"https://www.ticketmaster.com/","proxy":$proxy,"requestId":$id}' > "$work/input.json"
api='https://api.solvethree.com/v1'
curl --fail-with-body --silent --show-error --max-time 30 \
  --header @"$work/auth" --header 'Content-Type: application/json' \
  --data-binary @"$work/input.json" --output "$work/result.json" "$api/tasks?waitMs=0"
task_id=$(jq -er '.id' "$work/result.json")
encoded_id=$(jq -nr --arg id "$task_id" '$id|@uri')
printf 'Recovery taskId=%s\n' "$task_id"
deadline=$((SECONDS + 180))
while [[ $(jq -r '.status' "$work/result.json") =~ ^(pending|solving)$ ]]; do
  remaining=$((deadline - SECONDS))
  (( remaining > 0 )) || { echo 'Local deadline reached; resume the saved task ID' >&2; exit 1; }
  timeout=$((remaining < 25 ? remaining : 25))
  curl --fail-with-body --silent --show-error --max-time "$timeout" \
    --header @"$work/auth" --output "$work/result.json" "$api/tasks/$encoded_id?waitMs=15000"
  [[ $(jq -r '.status' "$work/result.json") =~ ^(pending|solving)$ ]] && sleep 1 || true
done
[[ $(jq -r '.status' "$work/result.json") == ready ]] || { echo 'Solver task failed' >&2; exit 1; }
user_agent=$(jq -er '.solution.userAgent' "$work/result.json")
client_hints=$(jq -er '.solution.secChUa' "$work/result.json")
jq -r '.solution.headers | to_entries[] | "\(.key): \(.value)"' "$work/result.json" > "$work/target-headers"
curl --silent --show-error --max-time 30 --proxy "$SOLVETHREE_PROXY" \
  --header @"$work/target-headers" --user-agent "$user_agent" \
  --header "sec-ch-ua: $client_hints" --output "$work/target-response" \
  --write-out 'Target HTTP %{http_code}\n' 'https://www.ticketmaster.com/'
# Inspect the application's response before treating the operation as successful.
# Replace the example target path with the actual supported workflow URL.

Hem görev gövdesindeki hem de son cURL çağrısındaki örnek hedef URL'yi, desteklenen iş akışınızın hedef URL'siyle değiştirin. Bir URL için çözüm alıp sonucu ilgisiz bir hedefe göndermeyin.

Betik, Bearer başlığıyla kimlik doğrular, tek bir görev oluşturur ve yalnızca döndürülen görev kimliğini sorgular. Oluşturma isteğinin zaman aşımı 30 saniyedir; durum sorgulama için 180 saniyelik yerel süre sınırı ve süreyle sınırlandırılmış GET istekleri kullanılır. Bunlar betiğin sınırlarıdır, çözüm süresi garantileri değildir. Otomatik yeniden deneme veya yönlendirme takibi etkin değildir.

Başlık nesnesinin tamamını uygulayın

pending ve solving, durum sorgulamaya devam edilmesi gerektiğini belirtir. Yalnızca ready kullanılabilir bir çözüm içerir. Betik, ham solution.headers nesnesini jq ile okur ve her girdiyi başlık dosyasında bir satıra dönüştürür; tek bir başlık seçmez veya görev kimliğini çözüm olarak kullanmaz.

Son istek bu başlık dosyasını yükler, solution.userAgent ve solution.secChUa değerlerini ayarlar ve ilk proxy'yi kullanır. Bunların yerine her zamanki tarayıcı başlıklarınızı koymak yerine bu değerleri birlikte kullanın.

API yanıtları, oluşturulan başlıklar ve hedef yanıtı yazdırılmak yerine özel bir geçici dizinde tutulur. Bunları rutin günlüklere dahil etmeyin ve kabuk komut izlemeyi etkinleştirmeyin.

Başka bir görev oluşturmak yerine mevcut görevi kurtarın

Yazdırılan kurtarma kimliklerini kaydedin. Betiği yeniden çalıştırmak yeni bir requestId oluşturur; bu bir kurtarma girişimi değildir. Oluşturma işlemini kurtarmak için kaydedilen istek kimliğini, ilk görev girdileriyle birebir aynı girdilerle yeniden kullanın. Betik çıkışta girdi dosyasını siler; bu nedenle isteği yeniden oluşturmanız gerekecekse bu girdileri güvenli biçimde saklayın.

POST isteği, görev kimliği döndürülmeden zaman aşımına uğruyor.

Bağlantı zaman aşımı, görev oluşturmanın başarısız olduğunu kanıtlamaz.

Şunu deneyin: Aynı görev isteğini kaydedilen requestId ile gönderin. Aynı girdiler mevcut görevi kurtarır; aynı kimliği yeniden kullanırken girdileri değiştirmek çakışmaya yol açar.

Yerel durum sorgulama süresi doluyor.

Mevcut görevin hâlâ beklemede veya çözülüyor durumunda olup olmadığını kontrol etmek için yazdırılan görev kimliğini kullanın.

Şunu deneyin: Bu kimlik için yeni ve sonlu bir süre sınırıyla GET sorgulamaya devam edin. Sırf yerel bekleme sona erdi diye yeni bir görev oluşturmayın.

Bir API isteği, başarısız bir HTTP yanıtı döndürüyor.

API çağrıları --fail-with-body kullanır; bu nedenle cURL, betik başarılı yanıt verisini okumadan çıkar.

Şunu deneyin: Tanılama için, temizlemeden önce kaydedilen yanıt gövdesini gizli biçimde inceleyen bir HTTP hata işleyicisi ekleyin. Değişmemiş girdilerle körü körüne yeniden denemek yerine bildirilen istek sorununu düzeltin.

Görev failed durumuna geçer.

Örnek, genel bir hata mesajı yazdırır; yanıt ayrıca errorCode ve error alanlarını içerir.

Şunu deneyin: Temizlemeden önce başarısızlık dalında bu alanları inceleyin, ardından bu görevi sorgulamayı bırakın. Neyi değiştireceğinize bildirilen nedene göre karar verin. Başarısız çözümlerin ücreti iade edilir.

İlk görevinizi çalıştırın.

$5 çalışma alanı kredisiyle başlayın.

Çalışma alanı oluşturun
cURL ile Kasada üstbilgileri oluşturun · solvethree