# HTTP Challenge
## lv11
> The Origin request header indicates where a request originates from.
`Origin header` 用來說明 request 來源,但可以透過自己修改它的內容來做到偽裝的目的。
```javascript=
const request = require('request')
const baseUrl = 'https://lidemy-http-challenge.herokuapp.com/api/v3'
const options = {
url: `${baseUrl}/hello`,
headers: {
Origin: 'lidemy.com'
}
}
function callback(error, response, body) {
if (error) {
console.log('發生錯誤:', error)
return
}
console.log(body)
}
request(options, callback)
```
## lv12
這題是直接靠開發者工具解的,根據題目送出 request 後得到"我已經把運送要用的 token 給你囉,請你仔細找找"這句話,重新整理然後從開發者工具找到 token。
這題我用 request module 所收到的 response header,長這樣,反而看不到跟瀏覽器出現的 token @@ 好奇怪
```javascript=
const request = require('request')
const baseUrl = 'https://lidemy-http-challenge.herokuapp.com/api/v3'
const options = {
url: `${baseUrl}/deliver_token`
}
function callback(error, response, body) {
if (error) {
console.log('發生錯誤:', error)
return
}
console.log(response)
}
request(options, callback)
```
```
headers: {
server: 'Cowboy',
connection: 'close',
'x-powered-by': 'Express',
'content-type': 'text/plain; charset=utf-8',
date: 'Wed, 05 May 2021 03:17:16 GMT',
'content-length': '66',
via: '1.1 vegur'
}
```
## lv13
題目要求要從菲律賓送出 request,去網路找個 Proxy 然後送出 request 之後拿到 token。
```javascript=
const request = require('request')
const baseUrl = 'https://lidemy-http-challenge.herokuapp.com/api/v3'
const options = {
url: `${baseUrl}/logs`,
headers: {
'X-Forwarded-For':'122.55.250.90'
}
}
function callback(error, response, body) {
if (error) {
console.log('發生錯誤:', error)
return
}
console.log(response)
}
request(options, callback)
```
## lv14
這題不清楚題目想要做甚麼,直接看提示:「伺服器是怎麼辨識是不是 Google 搜尋引擎的?仔細想想之前我們怎麼偽裝自己是 IE6 的」,也就是說要怎麼讓圖書館的伺服器知道送過來的 request 是來自 google 搜尋引擎。
那這樣看來題目的意思應該是想表達說,當使用者對 google server 送出 reuqest,google server 如何找到對應的圖書館伺服器拿資料這件事,然後回傳給使用者這件事,也就是說我們要扮演的角色是 google server。
最後找到[Googlebot](https://developers.google.com/search/blog/2019/10/updating-user-agent-of-googlebot)這個東西的 UA,送出 requetst,拿到 token。
> Googlebot is the web crawler software used by Google, which collects documents from the web to build a searchable index for the Google Search engine. BY WIKI
```javascript=
const request = require('request')
const baseUrl = 'https://lidemy-http-challenge.herokuapp.com/api/v3'
const options = {
url: `${baseUrl}/index`,
headers: {
'User-Agent':'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
}
}
function callback(error, response, body) {
if (error) {
console.log('發生錯誤:', error)
return
}
console.log(response)
}
request(options, callback)
```