Tcl GET请求添加查询

时间:2018-12-19 22:32:29

标签: http get request tcl

最近,我一直在研究使用https包和tls包的简单Tcl GET请求。我想做的就是等同于请求“ https://example.com/?query_param=5”并检索它发回的数据。到目前为止,我已经有了标准:

package require http
package require tls

http::register https 443 [list ::tls::socket -tls1 1]
dict set hdrs query_param 5
set req [::http::get url https://example.com/ -headers $hdrs]
set rec [::http::data $req]

#Handle Data etc...

我也尝试过:

set req [::http::get url https://example.com/?query_param=5]
set rec [::http::data $req]

但是没有运气。我在网上浏览了一下,但没有找到解决方法,这两个主意是我最好的选择。我没有从网站回复中收到预期的数据。问题是我的代码(我怀疑)还是网站本身?谢谢,非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

构建GET参数的方法是通过字符串连接,但是http::formatQuery命令可能会有所帮助。

package require http
package require tls
http::register https 443 [list ::tls::socket -tls1 1]

dict set params query_param 5
# Quoted just for better highlighting here on Stack Overflow
set urlBase "https://example.com/"
set req [::http::geturl $urlBase?[http::formatQuery {*}$params]]
set rec [::http::data $req]

如果您想改用POST,请使用-query选项:

package require http
package require tls
http::register https 443 [list ::tls::socket -tls1 1]

dict set params query_param 5
set urlBase "https://example.com/"
set req [::http::geturl $urlBase -query [http::formatQuery {*}$params]]
set rec [::http::data $req]

如果您没有获得预期的结果,则可能是其他问题。 HTTP(S)请求失败的方式有很多种,因此无法在那里给出通用的有用答案。