Betfair Tcl 登录脚本

Betfair Tcl login script

我正在尝试使用以下 tcl 脚本以非交互方式登录 betfair:-

#!/usr/bin/env tclsh
package require TclCurl

set postData "username=xxxxxxxxx&password=yyyyyyyyy"
set postHeader [list "X-Application: curlCommandLineTest"]
set BFLogin [::curl::transfer -url https://identitysso-cert.betfair.com/api/certlogin \
-headervar loginHeader \
-sslverifypeer 0 \
-sslcert "client-2048.crt" \
-sslkey "client-2048.key" \
-post 1 \
-postfields $postData \
-httpheader $postHeader ]

但是,它没有将输出存储在 BFLogin 中。相反,当脚本完成时,它只会输出如下内容:-

{"sessionToken":"92YN1v2Oz0lVv59nHwCryrfCnzNbInTCsssssssssssssssssss","loginStatus":"SUCCESS"}

很好,但它没有将其存储在上面的变量 BFLogin 中。请问我做错了什么?

根据我从 this manual and the wiki 收集到的信息,您似乎可以使用选项 -bodyvar 告诉 curl 在何处存储正文响应(调用响应和正文响应是分开的)。我无法测试代码,但它可能应该像这样工作:

#!/usr/bin/env tclsh
package require TclCurl

set postData "username=xxxxxxxxx&password=yyyyyyyyy"
set postHeader [list "X-Application: curlCommandLineTest"]
set responseBody ""
set BFLogin [::curl::transfer -url https://identitysso-cert.betfair.com/api/certlogin \
    -bodyvar responseBody \
    -sslverifypeer 0 \
    -sslcert "client-2048.crt" \
    -sslkey "client-2048.key" \
    -post 1 \
    -postfields $postData \
    -httpheader $postHeader ]

我还删除了你的 headervar 选项,因为它看起来不像你在使用它

可能更具可读性?

#!/usr/bin/env tclsh
package require TclCurl

dict set curlOpts -url https://identitysso-cert.betfair.com/api/certlogin
dict set curlOpts -bodyvar responseBody
dict set curlOpts -sslverifypeer 0
dict set curlOpts -sslcert "client-2048.crt"
dict set curlOpts -sslkey "client-2048.key"
dict set curlOpts -post 1
dict set curlOpts -postfields "username=xxxxxxxxx&password=yyyyyyyyy"
dict set curlOpts -httpheader [list "X-Application: curlCommandLineTest"]

curl::transfer {*}$curlOpts