Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Url HTTP获取请求tcl_Url_Https_Tcl - Fatal编程技术网

Url HTTP获取请求tcl

Url HTTP获取请求tcl,url,https,tcl,Url,Https,Tcl,我在TCL8.6中工作,我正在尝试向谷歌发送get请求。 以下是我使用过的代码: 我的问题是如何使用tcl向google发出get请求 package require http ::http::config -useragent "Mozilla/5.0" set url http://www.google.com set http [::http::geturl $url] set html [::http::data $http] return $html 您可以将此包装器用于htt

我在TCL8.6中工作,我正在尝试向谷歌发送get请求。 以下是我使用过的代码:

我的问题是如何使用tcl向google发出get请求

package require http
::http::config -useragent "Mozilla/5.0"

set url http://www.google.com

set http [::http::geturl $url]
set html [::http::data $http]

return $html

您可以将此包装器用于
http::geturl

package require uri
proc geturl_followRedirects {url args} {
    array set URI [::uri::split $url]
    for {set i 0} {$i < 5} {incr i} {
        set token [::http::geturl $url {*}$args]
        if {![string match {30[1237]} [::http::ncode $token]]} {return $token}
        array set meta [string tolower [set ${token}(meta)]]
        if {![info exist meta(location)]} {
            return $token
        }
        array set uri [::uri::split $meta(location)]
        unset meta
        if {$uri(host) eq {}} {set uri(host) $URI(host)}
        # problem w/ relative versus absolute paths
        set url [::uri::join {*}[array get uri]]
    }
}
可以使用

        set location [lmap {k v} [set ${token}(meta)] {
            if {[string match -nocase location $k]} {set v} continue
        }]
        if {$location eq {}} {
            return $token
        }
        array set uri [::uri::split $location]

对于保留元结构的值(和键)的不区分大小写的匹配。

您有问题吗?对不起,我的问题是如何使用tcl向google发出get请求?这就是您的做法。。。但是,
http://www.google.com
只是一个占位符地址:当你试图获取它时,你会得到一个谷歌认为你应该连接的地址的引用。在我的例子中,它是瑞典域名中的一个长URL。有一段代码可以让你通过重定向,我会看看是否可以把它挖出来。在
array set meta[string tolower[set${token}(meta)]
中,你也将位置值(重定向的URL)设置为小写,所以代码不会一直工作,因为URL可能区分大小写。这是一个非常微妙的错误。用于重定向到
位置:http://example.com/somefile
不适用于
位置:http://example.com/someFILE
@ivan73:谢谢你指出这一点。我已经修改了答案,希望有足够的解决办法。
        set location [lmap {k v} [set ${token}(meta)] {
            if {[string match -nocase location $k]} {set v} continue
        }]
        if {$location eq {}} {
            return $token
        }
        array set uri [::uri::split $location]