如何获取请求并获得与浏览器一样的Nodej结果?

时间:2017-07-09 20:38:14

标签: node.js

我正在尝试为图片搜索做一个get请求,而我得到的结果与浏览器中的结果不一样。有没有办法使用node.js得到相同的结果?

这是我正在使用的代码:

var keyword = "Photographie"
keyword = keyword.replace(/[^a-zA-Z0-9éàèùâêîôûçëïü]/g, "+")

var httpOptions = { hostname: 'yandex.com', 
                    path: '/images/search?text=' + keyword, //path does not accept spaces or dashes
                    headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'user-agent': 'Mozilla/5.0'}}

console.log(httpOptions.hostname + httpOptions.path +postTitle)

https.get(httpOptions, (httpResponse) => { 
    console.log(`STATUS: ${httpResponse.statusCode}`);
    httpResponse.setEncoding('utf8');
    httpResponse.on('data', (htmlBody) => {
        console.log(`BODY: ${htmlBody}`);
    });
});

1 个答案:

答案 0 :(得分:0)

通过切换到请求承诺库并使用Chrome浏览器中User-Agent标题名称和实际用户代理字符串的正确大写,此代码适用于我:

const rp = require('request-promise');
let keyword = "Photographie"

let options = { url: 'http://yandex.com/images/search?text=' + keyword,
                headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}
    };

rp(options).then(response => { 
    console.log(response);
}).catch(err => {
    console.log(err);
});

当我尝试运行您的实际代码时,我会获得302重定向和Cookie设置。我猜他们期望你遵循重定向并保留cookie。但是,您显然可以切换到上面的代码,它似乎适合我。我不确切知道是什么让我的代码工作,但可能是有一个更易识别的用户代理。