gpt4 book ai didi

node.js - 使用 node.js 抓取网站图标

转载 作者:搜寻专家 更新时间:2023-10-31 23:39:36 29 4
gpt4 key购买 nike

我有一个小程序需要使用 node.js 从站点中获取网站图标。这在大多数情况下都有效,但在 apple.com 上,我会遇到无法理解或修复的错误:

    var sys= require('sys');
var fs= require('fs');
var http = require('http');

var rurl = http.createClient(80, 'apple.com');
var requestUrl = 'http://www.apple.com/favicon.ico';
var request = rurl.request('GET', requestUrl, {"Content-Type": "image/x-icon", "host" : "apple.com" });
request.end();

request.addListener('response', function (response)
{
response.setEncoding('binary');
var body = '';
response.addListener('data', function (chunk) {
body += chunk;
});
response.addListener("end", function() {
});
});

当我发出这个请求时,响应是:

<head><body> This object may be found <a HREF="http://www.apple.com/favicon.ico">here</a> </body>

因此,我在客户端创建步骤中使用主机名的变体和使用“www.apple.com”的 url 请求以几乎所有可能的方式修改了上述代码,但通常我只会收到错误从 Node 如下:

node.js:63
throw e;
^
Error: Parse Error
at Client.ondata (http:901:22)
at IOWatcher.callback (net:494:29)
at node.js:769:9

此外,我对使用谷歌服务获取网站图标不感兴趣。

最佳答案

请求中的主机设置应为 www.apple.com(带 www),为什么要在请求中包含 Content-Type header ?这是没有意义的。相反,你应该使用 Accept: image/x-icon

我从那个网址得到了这个回复:

$ curl -I http://www.apple.com/favicon.ico
HTTP/1.1 200 OK
Last-Modified: Thu, 12 Mar 2009 17:09:30 GMT
ETag: "1036-464ef0c1c8680"
Server: Apache/2.2.11 (Unix)
X-Cache-TTL: 568
X-Cached-Time: Thu, 21 Jan 2010 14:55:37 GMT
Accept-Ranges: bytes
Content-Length: 4150
Content-Type: image/x-icon
Cache-Control: max-age=463
Expires: Sun, 12 Sep 2010 14:22:09 GMT
Date: Sun, 12 Sep 2010 14:14:26 GMT
Connection: keep-alive

解析它应该没有任何问题......我也得到了图标数据。

这是我使用非 www 主机 header 得到的响应:

$ curl -I http://www.apple.com/favicon.ico -H Host: apple.com
HTTP/1.0 400 Bad Request
Server: AkamaiGHost
Mime-Version: 1.0
Content-Type: text/html
Content-Length: 208
Expires: Sun, 12 Sep 2010 14:25:03 GMT
Date: Sun, 12 Sep 2010 14:25:03 GMT
Connection: close

HTTP/1.1 302 Object Moved
Location: http://www.apple.com/
Content-Type: text/html
Cache-Control: private
Connection: close

顺便说一句,这意味着他们的服务器工作不正常,但这是另一个讨论。

关于node.js - 使用 node.js 抓取网站图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3693878/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com