2017-07-15 215 views
3

我試圖請求使用請求的網站的HTML,但我不斷收到訪問被拒絕的錯誤。我如何克服這個問題?下面是以下功能的代碼:NodeJS +請求 - 請求網站時拒絕訪問

const request = require('request'); 
function firstShoe() { 
     request('https://www.jdsports.co.uk/product/green-nike-vapormax/281735/', function (error, response, body) { 
      console.log('body:', body); 
     }); 
} 

錯誤:

</BODY> 
</HTML> 

body: <HTML><HEAD> 
<TITLE>Access Denied</TITLE> 
</HEAD><BODY> 
<H1>Access Denied</H1> 

You don't have permission to access "http&#58;&#47;&#47;www&#46;jdsports&#46;co&#46;uk&#47;product&#47;green&#45;nike&#45;vapormax&#47;281735&#47;" on this server.<P> 
Reference&#32;&#35;18&#46;609d3e17&#46;1500116386&#46;15f0cb85 
</BODY> 
</HTML> 

通過將用戶代理到標頭中找到的解決方案。

function firstShoe() { 
     var options = { 
      headers: {'user-agent': 'node.js'} 
     } 
     request('https://www.jdsports.co.uk/product/green-nike-vapormax/281735/', options, function (error, response, body) { 
      console.log(body); 
      message.channel.send(body); 
     }); 
    } 
+0

是不是fs.readFile適合這種事情? – yBrodsky

+0

你在哪裏運行這段代碼?聽起來好像可能有防火牆或網頁過濾器。 – gregnr

+0

您可能在服務器中存在一些CORS問題。安裝該軟件包。在你的服務器上安裝這個包https://github.com/expressjs/cors。 – user3862830

回答

3

你得到一個403 Forbidden,因爲該網站正在阻止使用非普通用戶代理髮送的所有請求(基本上他們檢查User-Agent頭)。這是一個非常簡單的保護,以避免派生。

例如,如果使用其標準用戶代理髮送下面的捲曲,該響應被完全接收:

curl -v 'https://www.jdsports.co.uk/product/green-nike-vapormax/281735/' 

然而,如果重複該請求指定非現有用戶代理,該請求被封鎖:

curl -v 'https://www.jdsports.co.uk/product/green-nike-vapormax/281735/' -H 'User-Agent: StackOverflow'