通过POST请求从Interactive Brokers获取代码遇400错误求助
解决Interactive Brokers产品搜索API 400错误的方案
你的问题出在请求格式和必要请求头的缺失上,以下是修正后的实现:
问题分析
- 该API接口要求接收JSON格式的请求体,你用表单编码方式传递
payload,导致服务器无法解析请求。 - 缺少关键请求头,比如指定内容类型的
Content-Type、验证请求来源的Referer,这会触发服务器的合法性校验。
修正后的代码
import requests url = "https://www.interactivebrokers.co.uk/IBSales/servlet/exchange?apiPath=getProductsByFilters" payload = { "pageNumber": 1, "pageSize": 100, # 改为数字类型,原字符串可能不被接口接受 "sortField": "symbol", "sortDirection": "ASC", "product_country": ["GB"], "product_symbol": "", "new_product": "all", "product_type": ["STK"], "domain": "uk" } headers = { 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Content-Type': 'application/json', 'Referer': 'https://www.interactivebrokers.co.uk/en/trading/products-exchanges.php' } response = requests.post(url, json=payload, headers=headers) print(response.status_code) print(response.json())
关键修改点
- 替换
data=payload为json=payload:requests会自动序列化payload为JSON字符串并设置Content-Type为application/json,匹配接口的格式要求。 - 补充
Referer头:模拟浏览器从产品搜索页面发起请求,避免被服务器拦截。 - 调整
pageSize为数字类型:原代码中是字符串"100",接口可能期望整数参数。
如果仍然报错,可以尝试更新user-agent为当前主流浏览器的标识,或者先GET产品页面获取会话Cookie后再发起POST请求(部分网站会验证会话合法性)。
内容的提问来源于stack exchange,提问作者JPWilson
相关产品推荐
相关产品推荐

