在获取请求中提供授权时,在需要授权的nodeJS中抓取网站?

Posted

技术标签:

【中文标题】在获取请求中提供授权时,在需要授权的nodeJS中抓取网站?【英文标题】:Scrape a website in nodeJS which requires authorization, when authorization is provided in a get request? 【发布时间】:2019-04-26 16:32:42 【问题描述】:

我在 nodejs 中抓取一个网站以从中获取信息(使用 http 解析)。 该网站需要基本的身份验证用户名和密码才能登录。 我必须编写一个 API 来对该网站进行网络抓取。我将在邮递员中提供基本的身份验证 - 用户名和密码,并将仅从邮递员触发我的 API。

我不想在我的代码中硬编码用户名和密码。我将仅从邮递员请求中获取凭据。

那么在编写 API 时如何解决这个问题? 我将如何使用邮递员中提供的用户名和密码?

【问题讨论】:

您确定这是基本身份验证吗?如果是这样,我可以在 url 中传递它 【参考方案1】:

使用 NodeJS,您可以将用户 ID 和密码作为标题传递:

var request = require('request'),
    username = "john",
    password = "1234",
    url = "http://www.example.com",
    auth = "Basic " + new Buffer(username + ":" + password).toString("base64");

request(

    url : url,
    headers : 
        "Authorization" : auth
    
,
    function (error, response, body) 
        // Do scraping here
    
);

如果抓取很复杂或有交互式登录屏幕,我会考虑 puppeteer,这是处理这类东西的一个很好的框架。

【讨论】:

我不想在我的 ocde 中硬编码用户名和密码,我将只获得用户名和密码表单 API 请求/邮递员。那么在这种情况下我将如何向网站提出请求? 您在邮递员中执行的任何操作也可以在代码中执行,因此您将调用为您提供 ID 和密码的服务,然后将其提供给第二个请求。如果您有 github 存储库,我可以提供更具体的建议。但请注意不要暴露您的 ID 和密码! 转到这个 URL - 159.89.165.152 你会看到一个弹出窗口出现在你输入用户名和密码的地方。我想废弃这个网站。在邮递员中,我将在基本身份验证下提供用户名和密码。我应该如何编写我的 API,以便在我在 nodejs 应用程序中编写的 API 中使用邮递员中提供的用户名和密码?谢谢。 @Daviid 请帮忙。 复制并粘贴您放入邮递员的内容(您的 ID/密码除外),我会帮忙

以上是关于在获取请求中提供授权时,在需要授权的nodeJS中抓取网站?的主要内容,如果未能解决你的问题,请参考以下文章

使用 keycloak-nodejs-connect 时出错 - “无法在仅承载模式下交换代码以获取授权”

在Vue页面加载时动态发送请求获取微博授权url

如何在暴力模式下使用 OWASP ZAP 在授权请求中获取 CSRF 令牌

使用授权承载请求时在 Firebase 函数中获取令牌

Postman授权设置

在方法请求中使用 AWS_IAM 授权时需要 AWS Gateway 自定义授权者吗?