tls-client icon indicating copy to clipboard operation
tls-client copied to clipboard

[Feature Request]: Add ja4

Open xiaozhou26 opened this issue 1 year ago • 1 comments

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

xiaozhou26 avatar Aug 18 '24 05:08 xiaozhou26

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
================================================================================

rsforbes avatar Jul 06 '25 14:07 rsforbes