Request

View as MarkdownOpen in Claude
url = f'https://api.ibkr.com/v1/api/oauth/request_token'
oauth_params = {
"oauth_callback": {{oauth_callback }},
"oauth_consumer_key": {{consumer_key}},
"oauth_nonce": hex(random.getrandbits(128))[2:],
"oauth_signature_method": "RSA-SHA256",
"oauth_timestamp": str(int(datetime.now().timestamp())),
}
params_string = "&".join([f"{k}={v}" for k, v in sorted(oauth_params.items())])
# Base string successfully created
base_string = f"POST&{quote_plus(url)}&{quote(params_string)}"
# Base string should then signed with the private key in RSA-SHA256
encoded_base_string = base_string.encode("utf-8")
sha256_hash = SHA256.new(data=encoded_base_string)
bytes_pkcs115_signature = PKCS1_v1_5_Signature.new(
rsa_key=signature_key
).sign(msg_hash=sha256_hash)
b64_str_pkcs115_signature = base64.b64encode(bytes_pkcs115_signature).decode("utf-8")
# Establish the authorization header
oauth_params["oauth_signature"] = quote_plus(b64_str_pkcs115_signature)
oauth_params["realm"] = realm
oauth_header = "OAuth " + ", ".join([f'{k}="{v}"' for k, v in sorted(oauth_params.items())])
headers = {"authorization": oauth_header}
headers["User-Agent"] = "python/3.11"
request_request = requests.post(url=url, headers=headers)
if request_request.status_code == 200:
rToken = request_request.json()["oauth_token"]