tls-client
tls-client copied to clipboard
[Feature Request]: Add ja4
Describe the feature / enhancement and how it would improve things
Has the browser already used ja4 fingerprint verification? Have you considered adding ja4?
Describe how your proposal will work, with code and/or pseudo-code
Add ja4 and ja4 hash to client_test_utils.go
Sample Code showing JA4 failure.:
#!/usr/bin/env python3
"""
TLS Client example to bypass JA4 fingerprinting on prosportstransactions.com
Uses tls-client library to mimic browser fingerprints and avoid Cloudflare detection
"""
import tls_client
import json
import time
from datetime import datetime
def create_session(client_id="chrome_112"):
"""Create a TLS session with browser-like fingerprint"""
session = tls_client.Session(
client_identifier=client_id,
random_tls_extension_order=True
)
# Set browser-like headers
session.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'Sec-Ch-Ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"',
'Sec-Ch-Ua-Mobile': '?0',
'Sec-Ch-Ua-Platform': '"Windows"',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-User': '?1',
}
return session
def fetch_with_client(client_id):
"""Fetch prosportstransactions.com with specific client identifier"""
url = "https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search"
print(f"\n[ATTEMPT] Client: {client_id}")
print(f"[{datetime.now().isoformat()}] Starting request")
print(f"URL: {url}")
try:
session = create_session(client_id)
start_time = time.time()
response = session.get(url)
elapsed_time = time.time() - start_time
# Report response details
print(f"[RESPONSE] Status Code: {response.status_code}")
print(f"[RESPONSE] Time: {elapsed_time:.2f}s")
if response.status_code == 403 and "cf-ray" in response.headers:
print(f"[BLOCKED] Cloudflare Ray ID: {response.headers.get('cf-ray')}")
print(f"[BLOCKED] CF-Mitigated: {response.headers.get('cf-mitigated', 'N/A')}")
elif response.status_code == 200:
print(f"[SUCCESS] Successfully bypassed JA4 fingerprinting!")
print(f"[SUCCESS] Content Length: {len(response.text)} bytes")
if "cf-ray" in response.headers:
print(f"[SUCCESS] Cloudflare Ray ID: {response.headers.get('cf-ray')}")
# Save successful response
with open('response_debug.html', 'w', encoding='utf-8') as f:
f.write(response.text)
print("[SUCCESS] Response saved to: response_debug.html")
return response
except Exception as e:
print(f"[ERROR] {type(e).__name__}: {str(e)}")
return None
def main():
"""Main function - tries multiple client identifiers"""
print("=" * 80)
print("TLS Client JA4 Bypass Example for prosportstransactions.com")
print("=" * 80)
# Client identifiers to try (ordered by success likelihood)
clients = [
"chrome_112", "chrome_110", "chrome_108", "chrome_104",
"firefox_110", "firefox_108", "safari16_5", "chrome_120"
]
success = False
for client_id in clients:
response = fetch_with_client(client_id)
if response and response.status_code == 200:
success = True
print(f"\n[FINAL] Success with client: {client_id}")
break
elif response:
# Log headers for debugging
print(f"[DEBUG] Response headers: {json.dumps(dict(response.headers), indent=2)}")
if not success:
print("\n[FINAL] All client identifiers were blocked by Cloudflare JA4 detection")
print("[INFO] Possible solutions:")
print(" 1. Try using a proxy/VPN")
print(" 2. Add delays between requests")
print(" 3. Use browser automation (Playwright/Selenium)")
print(" 4. Check if the site has an API")
print("\n" + "=" * 80)
print("Execution completed")
print("=" * 80)
if __name__ == "__main__":
main()
Results:
================================================================================
TLS Client JA4 Bypass Example for prosportstransactions.com
================================================================================
[ATTEMPT] Client: chrome_112
[2025-07-06T14:16:15.951909] Starting request
URL: https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search
[RESPONSE] Status Code: 403
[RESPONSE] Time: 0.30s
[DEBUG] Response headers: {
"Accept-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Alt-Svc": "h3=\":443\"; ma=86400",
"Cache-Control": "private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
"Cf-Mitigated": "challenge",
"Cf-Ray": "95afb80d09988b98-ORD",
"Content-Encoding": "br",
"Content-Type": "text/html; charset=UTF-8",
"Critical-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Resource-Policy": "same-origin",
"Date": "Sun, 06 Jul 2025 14:16:16 GMT",
"Expires": "Thu, 01 Jan 1970 00:00:01 GMT",
"Nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"Origin-Agent-Cluster": "?1",
"Permissions-Policy": "accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()",
"Referrer-Policy": "same-origin",
"Report-To": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=Ap%2F%2BVjN0LWRho1yvzZG%2FgDO8moVg%2FaHlr9rWV8PFcQBhsLip%2F1E%2FUauqncxLp4LBOPWZE9eKb%2FH5gqdWMxUf5hT43hk2S%2B3MQzTOnD%2FCtrk%2ByhA7gqP3Ms4Ef4R82rMywoowGmgDdXaxAsDbxCsRwA%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"Server": "cloudflare",
"Server-Timing": [
"chlray;desc=\"95afb80d09988b98\"",
"cfL4;desc=\"?proto=TCP&rtt=9010&min_rtt=8613&rtt_var=3056&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2838&recv_bytes=1240&delivery_rate=257836&cwnd=252&unsent_bytes=0&cid=5f04eda072643d6e&ts=62&x=0\""
],
"Vary": "Accept-Encoding",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "SAMEORIGIN"
}
[ATTEMPT] Client: chrome_110
[2025-07-06T14:16:16.254462] Starting request
URL: https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search
[RESPONSE] Status Code: 403
[RESPONSE] Time: 0.10s
[DEBUG] Response headers: {
"Accept-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Alt-Svc": "h3=\":443\"; ma=86400",
"Cache-Control": "private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
"Cf-Mitigated": "challenge",
"Cf-Ray": "95afb80d895061b7-ORD",
"Content-Encoding": "br",
"Content-Type": "text/html; charset=UTF-8",
"Critical-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Resource-Policy": "same-origin",
"Date": "Sun, 06 Jul 2025 14:16:16 GMT",
"Expires": "Thu, 01 Jan 1970 00:00:01 GMT",
"Nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"Origin-Agent-Cluster": "?1",
"Permissions-Policy": "accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()",
"Referrer-Policy": "same-origin",
"Report-To": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=AhaPXop%2BQDzBwtseOW%2Fy%2FNuj7gLDuF%2FaA8GlEriDxn6Z9mma6h%2FyWBZ%2FKxWOHjtqLFDHnFM56e1sV9IZh8653rDTIx21hvmYJnKjDWcSBeQNnQxMlQUi2LVlKR2645EOlABA%2F9RQpz2RLWXMRJqp4A%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"Server": "cloudflare",
"Server-Timing": [
"chlray;desc=\"95afb80d895061b7\"",
"cfL4;desc=\"?proto=TCP&rtt=12661&min_rtt=11587&rtt_var=5204&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2837&recv_bytes=1240&delivery_rate=196527&cwnd=252&unsent_bytes=0&cid=32c14e89b6fe9192&ts=52&x=0\""
],
"Vary": "Accept-Encoding",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "SAMEORIGIN"
}
[ATTEMPT] Client: chrome_108
[2025-07-06T14:16:16.353778] Starting request
URL: https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search
[RESPONSE] Status Code: 403
[RESPONSE] Time: 0.08s
[DEBUG] Response headers: {
"Accept-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Alt-Svc": "h3=\":443\"; ma=86400",
"Cache-Control": "private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
"Cf-Mitigated": "challenge",
"Cf-Ray": "95afb80e1a811b04-ORD",
"Content-Encoding": "br",
"Content-Type": "text/html; charset=UTF-8",
"Critical-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Resource-Policy": "same-origin",
"Date": "Sun, 06 Jul 2025 14:16:16 GMT",
"Expires": "Thu, 01 Jan 1970 00:00:01 GMT",
"Nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"Origin-Agent-Cluster": "?1",
"Permissions-Policy": "accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()",
"Referrer-Policy": "same-origin",
"Report-To": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=761Tj4kSxVsX%2FHZ7r80k%2Bt3LV8KbR5GfwGOMCMYchYDftxFSfirjrZcnw%2BI%2FMJJn4V5WuzE8z6g45yMc2WAnH2R7iI7ADcDS7HDQL2W03MsxR2GYnR1HUidUBMMVDlZBbDQFOsoqCgfFgfCw1l2swQ%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"Server": "cloudflare",
"Server-Timing": [
"chlray;desc=\"95afb80e1a811b04\"",
"cfL4;desc=\"?proto=TCP&rtt=12253&min_rtt=11613&rtt_var=4382&sent=4&recv=6&lost=0&retrans=0&sent_bytes=2837&recv_bytes=1240&delivery_rate=204883&cwnd=252&unsent_bytes=0&cid=21ddb24383771de4&ts=36&x=0\""
],
"Vary": "Accept-Encoding",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "SAMEORIGIN"
}
[ATTEMPT] Client: chrome_104
[2025-07-06T14:16:16.436215] Starting request
URL: https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search
[RESPONSE] Status Code: 403
[RESPONSE] Time: 0.07s
[DEBUG] Response headers: {
"Accept-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Alt-Svc": "h3=\":443\"; ma=86400",
"Cache-Control": "private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
"Cf-Mitigated": "challenge",
"Cf-Ray": "95afb80e7feee15b-ORD",
"Content-Encoding": "br",
"Content-Type": "text/html; charset=UTF-8",
"Critical-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Resource-Policy": "same-origin",
"Date": "Sun, 06 Jul 2025 14:16:16 GMT",
"Expires": "Thu, 01 Jan 1970 00:00:01 GMT",
"Nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"Origin-Agent-Cluster": "?1",
"Permissions-Policy": "accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()",
"Referrer-Policy": "same-origin",
"Report-To": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=8qu9R1n6Vv99dDlhQ4kngq9ssUfp4cfn4BIioyl0JxmJMrkZvOjtfC1yXf8sLuFDbFVDfh4Lzfo%2BhQU4kCVKU3oTq4HLCjsueVN4j%2BHOjrG812ykXdGP2kulhpzUH%2Bjw3ck50KVHcqFCOAz1tNEQlA%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"Server": "cloudflare",
"Server-Timing": [
"chlray;desc=\"95afb80e7feee15b\"",
"cfL4;desc=\"?proto=TCP&rtt=8846&min_rtt=8496&rtt_var=2672&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2837&recv_bytes=1234&delivery_rate=313910&cwnd=252&unsent_bytes=0&cid=8f10c4122f1d6da2&ts=41&x=0\""
],
"Vary": "Accept-Encoding",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "SAMEORIGIN"
}
[ATTEMPT] Client: firefox_110
[2025-07-06T14:16:16.508970] Starting request
URL: https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search
[RESPONSE] Status Code: 403
[RESPONSE] Time: 0.09s
[DEBUG] Response headers: {
"Accept-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Alt-Svc": "h3=\":443\"; ma=86400",
"Cache-Control": "private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
"Cf-Mitigated": "challenge",
"Cf-Ray": "95afb80ef9a922d0-ORD",
"Content-Encoding": "br",
"Content-Type": "text/html; charset=UTF-8",
"Critical-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Resource-Policy": "same-origin",
"Date": "Sun, 06 Jul 2025 14:16:16 GMT",
"Expires": "Thu, 01 Jan 1970 00:00:01 GMT",
"Nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"Origin-Agent-Cluster": "?1",
"Permissions-Policy": "accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()",
"Referrer-Policy": "same-origin",
"Report-To": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=UmQVQs411ySL1R7KHWmsH6TdJ3X7XMPTVSJs47GJE%2BcBxN0qihY0H0oJCTQxmTZrq9nkZ9mlxP5aYCocHr4wj3wyJgjW2pb9JJ1WOgttyc0IplVPLh34xCzMz9w9ye%2FuZDIYsiCywgQasbEt%2FPyAPg%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"Server": "cloudflare",
"Server-Timing": [
"chlray;desc=\"95afb80ef9a922d0\"",
"cfL4;desc=\"?proto=TCP&rtt=8987&min_rtt=8740&rtt_var=2846&sent=6&recv=7&lost=0&retrans=0&sent_bytes=3217&recv_bytes=1312&delivery_rate=407063&cwnd=253&unsent_bytes=0&cid=88fe5cf00d3d1c4b&ts=58&x=0\""
],
"Vary": "Accept-Encoding",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "SAMEORIGIN"
}
[ATTEMPT] Client: firefox_108
[2025-07-06T14:16:16.599198] Starting request
URL: https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search
[RESPONSE] Status Code: 403
[RESPONSE] Time: 0.06s
[DEBUG] Response headers: {
"Accept-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Alt-Svc": "h3=\":443\"; ma=86400",
"Cache-Control": "private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
"Cf-Mitigated": "challenge",
"Cf-Ray": "95afb80f6e4d50d3-ORD",
"Content-Encoding": "br",
"Content-Type": "text/html; charset=UTF-8",
"Critical-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Resource-Policy": "same-origin",
"Date": "Sun, 06 Jul 2025 14:16:16 GMT",
"Expires": "Thu, 01 Jan 1970 00:00:01 GMT",
"Nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"Origin-Agent-Cluster": "?1",
"Permissions-Policy": "accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()",
"Referrer-Policy": "same-origin",
"Report-To": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=s0MQDE5HkG%2BDaeBqsO7mI4mfj4LOENCaVZaV15wOh1kYc%2Bx2gFgBYaQ98sv660D%2FK1MxXo%2BjTd01IEmXaAyCMo9ZP5rMl8h6j%2FtVczQ%2BeGQalOhimwvZKb9Qt8gLHvg8MULN7HKSLoBGWXbEJgmhfw%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"Server": "cloudflare",
"Server-Timing": [
"chlray;desc=\"95afb80f6e4d50d3\"",
"cfL4;desc=\"?proto=TCP&rtt=8802&min_rtt=8568&rtt_var=2584&sent=7&recv=8&lost=0&retrans=0&sent_bytes=3688&recv_bytes=1312&delivery_rate=503043&cwnd=253&unsent_bytes=0&cid=13993ceff65e5fec&ts=27&x=0\""
],
"Vary": "Accept-Encoding",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "SAMEORIGIN"
}
[ATTEMPT] Client: safari16_5
[2025-07-06T14:16:16.655136] Starting request
URL: https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search
[RESPONSE] Status Code: 403
[RESPONSE] Time: 0.06s
[DEBUG] Response headers: {
"Accept-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Alt-Svc": "h3=\":443\"; ma=86400",
"Cache-Control": "private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
"Cf-Mitigated": "challenge",
"Cf-Ray": "95afb80fba13e852-ORD",
"Content-Encoding": "br",
"Content-Type": "text/html; charset=UTF-8",
"Critical-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Resource-Policy": "same-origin",
"Date": "Sun, 06 Jul 2025 14:16:16 GMT",
"Expires": "Thu, 01 Jan 1970 00:00:01 GMT",
"Nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"Origin-Agent-Cluster": "?1",
"Permissions-Policy": "accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()",
"Referrer-Policy": "same-origin",
"Report-To": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=C6KPgdzQMvaOxC9HK9lglo8Ge20cb67fqJ7aIPHJOYmhX2aceVL%2BveM9vVKwg57eAKLJoqZ2gx0o8K2gtm6uZu%2FnJEXIO7BIKDTkVU4PJPSFlIZUedDl6o3UmVLd56n02%2Fl86bkmM5xijvyzMcRnsg%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"Server": "cloudflare",
"Server-Timing": [
"chlray;desc=\"95afb80fba13e852\"",
"cfL4;desc=\"?proto=TCP&rtt=8805&min_rtt=8490&rtt_var=2731&sent=5&recv=7&lost=0&retrans=0&sent_bytes=2912&recv_bytes=1298&delivery_rate=300442&cwnd=252&unsent_bytes=0&cid=c2e920213dd1e2ca&ts=32&x=0\""
],
"Vary": "Accept-Encoding",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "SAMEORIGIN"
}
[ATTEMPT] Client: chrome_120
[2025-07-06T14:16:16.715469] Starting request
URL: https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search
[RESPONSE] Status Code: 403
[RESPONSE] Time: 0.10s
[DEBUG] Response headers: {
"Accept-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Alt-Svc": "h3=\":443\"; ma=86400",
"Cache-Control": "private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
"Cf-Mitigated": "challenge",
"Cf-Ray": "95afb8103aad223d-ORD",
"Content-Encoding": "br",
"Content-Security-Policy-Report-Only": "script-src 'none'; report-uri https://csp-reporting.cloudflare.com/cdn-cgi/script_monitor/report?m=B5cXe7LsTSQcpWYLlrqZg9jMoinmHfVp9GkOQTBdqYA-1751811376-1.0.1.1-JRmSWJ2wV2A2s7Aziye2NNvWUoWrQNbVw0suMQNPWcdwXXGZev0YRoMZV2iRA9t57t1k7zh68Uixyf2ld2TfXjDwDj97GYN5ZuE3EyH.kJ0A3A2P1UNph1qsNDcM.xkGjPXTVQNDZ6tKObGTT4EKPb9KzvQOg5PSGhY2RSN0Ef4; report-to cf-csp-endpoint",
"Content-Type": "text/html; charset=UTF-8",
"Critical-Ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"Cross-Origin-Embedder-Policy": "require-corp",
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Resource-Policy": "same-origin",
"Date": "Sun, 06 Jul 2025 14:16:16 GMT",
"Expires": "Thu, 01 Jan 1970 00:00:01 GMT",
"Nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"Origin-Agent-Cluster": "?1",
"Permissions-Policy": "accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()",
"Referrer-Policy": "same-origin",
"Report-To": [
"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=m%2FFeewbBoDRi1lrSaorycTpkOd0e4bc53npRSnK4lKRQEmVhBtqmmEKvTSYTPDAIATBf6zoAA2%2Bo%2Bhjmhwqj5%2FYcahKJuvaEWmLGH71Ni%2BezaSGBKFZO%2BuyIvd78GX71N5SyMhmKYWnMbK0eyVvdkw%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"{\"endpoints\":[{\"url\":\"https:\\/\\/csp-reporting.cloudflare.com\\/cdn-cgi\\/script_monitor\\/report?m=B5cXe7LsTSQcpWYLlrqZg9jMoinmHfVp9GkOQTBdqYA-1751811376-1.0.1.1-JRmSWJ2wV2A2s7Aziye2NNvWUoWrQNbVw0suMQNPWcdwXXGZev0YRoMZV2iRA9t57t1k7zh68Uixyf2ld2TfXjDwDj97GYN5ZuE3EyH.kJ0A3A2P1UNph1qsNDcM.xkGjPXTVQNDZ6tKObGTT4EKPb9KzvQOg5PSGhY2RSN0Ef4\"}],\"group\":\"cf-csp-endpoint\",\"max_age\":86400}"
],
"Server": "cloudflare",
"Server-Timing": [
"chlray;desc=\"95afb8103aad223d\"",
"cfL4;desc=\"?proto=TCP&rtt=14498&min_rtt=14191&rtt_var=4255&sent=5&recv=8&lost=0&retrans=0&sent_bytes=2912&recv_bytes=1266&delivery_rate=205764&cwnd=252&unsent_bytes=0&cid=78e5fbe09cd8cf67&ts=46&x=0\""
],
"Vary": "Accept-Encoding",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "SAMEORIGIN"
}
[FINAL] All client identifiers were blocked by Cloudflare JA4 detection
================================================================================
Execution completed
================================================================================