Tcl GET Запрос Добавить запрос - PullRequest
0 голосов
/ 20 декабря 2018

Недавно я изучал простые запросы Tcl GET, используя пакет https с пакетом tls.То, что я хотел бы сделать, это эквивалент запроса "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 голосов
/ 20 декабря 2018

Способ построения параметров 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) запросы могут завершаться сбоем, поэтому нет никакого способа дать общий полезный ответ там.

...