babaTEEpe commited on
Commit
87dc4ec
·
verified ·
1 Parent(s): afdc8f9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -10
app.py CHANGED
@@ -81,16 +81,36 @@ def load_tokens():
81
  # Helper: Exchange authorization code or refresh token
82
  def fetch_token_from_api(payload):
83
  url = "https://openapi.ctrader.com/apps/token"
84
- res = requests.get(url, params=payload)
85
- if res.status_code == 200:
86
- data = res.json()
87
- logger.info("Token request successful")
88
- return data
89
- elif res.status_code == 429:
90
- logger.warning("cTrader API rate limited (HTTP 429). Please wait a minute before retrying login.")
91
- return None
92
- else:
93
- logger.error(f"Token exchange failed (HTTP {res.status_code}): {res.text[:200]}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  return None
95
 
96
  # Helper: Send protocol buffer message over SSL Socket
 
81
  # Helper: Exchange authorization code or refresh token
82
  def fetch_token_from_api(payload):
83
  url = "https://openapi.ctrader.com/apps/token"
84
+ headers = {
85
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
86
+ "Accept": "application/json, text/plain, */*"
87
+ }
88
+
89
+ # Attempt 1: GET request with custom headers
90
+ try:
91
+ res = requests.get(url, params=payload, headers=headers, timeout=10)
92
+ if res.status_code == 200:
93
+ data = res.json()
94
+ logger.info("Token request successful (GET)")
95
+ return data
96
+ except Exception as e:
97
+ logger.warning(f"GET token request exception: {e}")
98
+
99
+ # Attempt 2: POST request fallback with form-encoded data
100
+ try:
101
+ res = requests.post(url, data=payload, headers=headers, timeout=10)
102
+ if res.status_code == 200:
103
+ data = res.json()
104
+ logger.info("Token request successful (POST)")
105
+ return data
106
+ elif res.status_code == 429:
107
+ logger.warning("cTrader API rate limited (HTTP 429). Cloudflare/WAF blocked request.")
108
+ return None
109
+ else:
110
+ logger.error(f"Token exchange failed (HTTP {res.status_code}): {res.text[:200]}")
111
+ return None
112
+ except Exception as e:
113
+ logger.error(f"POST token request exception: {e}")
114
  return None
115
 
116
  # Helper: Send protocol buffer message over SSL Socket