【问题标题】:Why am I getting a 403 for a POST?为什么我的 POST 会收到 403?
【发布时间】:2021-06-16 15:18:49
【问题描述】:

我正在使用cheerios 来获取_csrf 并通过express 进行发帖请求:

request('http://scdownloader.net/', function (error, response, html) {
    if (!error && response.statusCode == 200) {
    var $ = cheerio.load(html);    
    var form = $("#mainForm");

    var _csrf;
    
    // Scrape for _csrf
    for (var i = 0; i < form[0].children.length; i++) {
        var a = form[0].children[i].attribs
        if (a != null) {
            a = a.class
            if (a != null && a === "large-5 columns btn-wrapper") {                
                a = form[0].children[i].children;
                for (var i = 0; i < a.length; i++) {
                    var b = a[i].attribs;
                    if (b != null) {
                        if (b.name != null && b.name === '_csrf') {
                            _csrf = b.value;
                            console.log(_csrf);
                        }
                    }
                }
            }
        }        


    if (_csrf == null) {
        // Callback with error
    }

    var title = "/newpartyarmy/tell-me-the-truth";
    var url = "https://soundcloud.com" + title;

    var form = {
        _csrf: _csrf,
        url : url
    }

    request.post({url:'http://scdownloader.net/download', form: form}, function(err, httpResponse, body){ 
        if (!err && httpResponse.statusCode == 200) {
            console.log(body);
            console.log(httpResponse);
        }
        console.log(httpResponse.statusCode);
        console.log(httpResponse.statusMessage);        
     })
  }
});

这会返回一个403 状态码。但是,当我自己去scdownload.net 获取_csrf 并使用http://http-post.com/ 发布它时,它可以工作。但是,它不适用于我的抓取版本。

示例抓取版本:Ii055I/uIr/44xbG3cB/1581eCjKEY/A9yR6XY88JGg= 手动抓取版本示例:m2RRexmzE3La1pD168ONDlz0giZlBdoxlUeyaJpBIeE=

【问题讨论】:

    标签: node.js http express post cheerio


    【解决方案1】:

    在我看来,该网站需要使用 cookie。根据要求使用jar: true

    示例: var request = request.defaults({jar: true}) request('http://www.google.com', function () { request('http://images.google.com') })

    【讨论】:

    • 我在帖子中的代码前添加了var request = request.defaults({jar: true}),但我仍然得到403 代码。
    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2014-03-12
    • 2014-11-18
    • 2014-05-30
    • 2011-11-24
    • 2021-10-03
    相关资源
    最近更新 更多