我使用以下命令:
wget --no-check-certificate“https://www.googleapis.com/youtube/v3/search?alt=json&q=hello&part=snippet”
我得到403 Forbidden错误(这是预期的输出),但是还有一个伴随的服务器响应,因为我无法获得。我尝试了各种选项 - 忽略内容长度,提供私有PEM证书,设置用户代理等,但仍然无法获得该输出。
然而,使用curl,输出符合预期。 卷曲“https://www.googleapis.com/youtube/v3/search?alt=json&q=hello&part=snippet”
--2013-06-07 18:37:13-- https://www.googleapis.com/youtube/v3/search?alt=json&q=hello&part=snippet
Resolving www.googleapis.com (www.googleapis.com)... 74.125.135.95, 2404:6800:4001:c01::5f
Connecting to www.googleapis.com (www.googleapis.com)|74.125.135.95|:443... connected.
WARNING: The certificate of `www.googleapis.com' is not trusted.
WARNING: The certificate of `www.googleapis.com' hasn't got a known issuer.
HTTP request sent, awaiting response... 403 Forbidden
2013-06-07 18:37:14 ERROR 403: Forbidden.
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "dailyLimitExceededUnreg",
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
"extendedHelp": "https://code.google.com/apis/console"
}
],
"code": 403,
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
}
}
问题是我的许多机器只安装了wget,所以这对我来说是个烦人的问题。我几乎可以肯定我错过了一些让wget显示输出的选项。如果您有任何想法,我很乐意尝试一下。 感谢。
答案 0 :(得分:2)
不幸的是,您使用wget
时运气不佳。
wget
程序仅处理HTTP
协议版本1.0。在HTTP 1.1
中,可以使用chunked
编码发送回复。这意味着任一代理都可以在块之前发送数据,每个块之前发送的块大小。这在发送大量数据时是有意义的,或者是提前未知大小的数据。除此之外,chunked
编码还允许您移动到正在传输的资源的不同部分。
在您的案例中发生的事情是,当您尝试通过HTTP/1.0
与Youtube交谈时,服务器会回答说您运气不好。当您通过HTTP/1.1
与它交谈时,它会为您提供包含您看到的JSON的分块响应。 curl
处理HTTP/1.1
,因此会处理Youtube提供的chunked
转移编码。 This Youtube clip让您快速了解分块编码。
最后,以下内容有点偏离主题:分块转移编码和随后的范围请求和响应相当复杂。 Kit剑桥做了really nice presentation on them