mirror of
https://github.com/zedeus/nitter.git
synced 2024-12-23 04:15:38 +00:00
Remove user agents
This commit is contained in:
parent
e0b141daf9
commit
43b0bdc08a
|
@ -1,70 +0,0 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
import random, strformat, strutils, sequtils
|
|
||||||
|
|
||||||
randomize()
|
|
||||||
|
|
||||||
const rvs = [
|
|
||||||
"11.0", "40.0", "42.0", "43.0", "47.0", "50.0", "52.0", "53.0", "54.0",
|
|
||||||
"61.0", "66.0", "67.0", "69.0", "70.0"
|
|
||||||
]
|
|
||||||
|
|
||||||
proc rv(): string =
|
|
||||||
if rand(10) < 1: ""
|
|
||||||
else: "; rv:" & sample(rvs)
|
|
||||||
|
|
||||||
# OS
|
|
||||||
|
|
||||||
const enc = ["; U", "; N", "; I", ""]
|
|
||||||
|
|
||||||
proc linux(): string =
|
|
||||||
const
|
|
||||||
window = ["X11", "Wayland", "Unknown"]
|
|
||||||
arch = ["i686", "x86_64", "arm"]
|
|
||||||
distro = ["", "; Ubuntu/14.10", "; Ubuntu/16.10", "; Ubuntu/19.10",
|
|
||||||
"; Ubuntu", "; Fedora"]
|
|
||||||
sample(window) & sample(enc) & "; Linux " & sample(arch) & sample(distro)
|
|
||||||
|
|
||||||
proc windows(): string =
|
|
||||||
const
|
|
||||||
nt = ["5.1", "5.2", "6.0", "6.1", "6.2", "6.3", "6.4", "9.0", "10.0"]
|
|
||||||
arch = ["; WOW64", "; Win64; x64", "; ARM", ""]
|
|
||||||
trident = ["", "; Trident/5.0", "; Trident/6.0", "; Trident/7.0"]
|
|
||||||
"Windows " & sample(nt) & sample(enc) & sample(arch) & sample(trident)
|
|
||||||
|
|
||||||
const macs = toSeq(6..15).mapIt($it) & @["14_4", "10_1", "9_3"]
|
|
||||||
|
|
||||||
proc mac(): string =
|
|
||||||
"Macintosh; Intel Mac OS X 10_" & sample(macs) & sample(enc)
|
|
||||||
|
|
||||||
# Browser
|
|
||||||
|
|
||||||
proc presto(): string =
|
|
||||||
const p = ["2.12.388", "2.12.407", "22.9.168", "2.9.201", "2.8.131", "2.7.62",
|
|
||||||
"2.6.30", "2.5.24"]
|
|
||||||
const v = ["10.0", "11.0", "11.1", "11.5", "11.6", "12.00", "12.14", "12.16"]
|
|
||||||
&"Presto/{sample(p)} Version/{sample(v)}"
|
|
||||||
|
|
||||||
# Samples
|
|
||||||
|
|
||||||
proc product(): string =
|
|
||||||
const opera = ["Opera/9.80", "Opera/12.0"]
|
|
||||||
if rand(20) < 1: "Mozilla/5.0"
|
|
||||||
else: sample(opera)
|
|
||||||
|
|
||||||
proc os(): string =
|
|
||||||
let r = rand(10)
|
|
||||||
let os =
|
|
||||||
if r < 6: windows()
|
|
||||||
elif r < 9: linux()
|
|
||||||
else: mac()
|
|
||||||
&"({os}{rv()})"
|
|
||||||
|
|
||||||
proc browser(prod: string): string =
|
|
||||||
if "Opera" in prod: presto()
|
|
||||||
else: "like Gecko"
|
|
||||||
|
|
||||||
# Agent
|
|
||||||
|
|
||||||
proc getAgent*(): string =
|
|
||||||
let prod = product()
|
|
||||||
&"{prod} {os()} {browser(prod)}"
|
|
|
@ -5,7 +5,7 @@ import asynchttpserver, asyncstreams, asyncfile, asyncnet
|
||||||
import jester
|
import jester
|
||||||
|
|
||||||
import router_utils
|
import router_utils
|
||||||
import ".."/[types, formatters, agents, utils]
|
import ".."/[types, formatters, utils]
|
||||||
|
|
||||||
export asynchttpserver, asyncstreams, asyncfile, asyncnet
|
export asynchttpserver, asyncstreams, asyncfile, asyncnet
|
||||||
export httpclient, os, strutils, asyncstreams, base64, re
|
export httpclient, os, strutils, asyncstreams, base64, re
|
||||||
|
@ -14,10 +14,8 @@ const
|
||||||
m3u8Mime* = "application/vnd.apple.mpegurl"
|
m3u8Mime* = "application/vnd.apple.mpegurl"
|
||||||
maxAge* = "max-age=604800"
|
maxAge* = "max-age=604800"
|
||||||
|
|
||||||
let mediaAgent* = getAgent()
|
proc safeFetch*(url: string): Future[string] {.async.} =
|
||||||
|
let client = newAsyncHttpClient()
|
||||||
proc safeFetch*(url, agent: string): Future[string] {.async.} =
|
|
||||||
let client = newAsyncHttpClient(userAgent=agent)
|
|
||||||
try: result = await client.getContent(url)
|
try: result = await client.getContent(url)
|
||||||
except: discard
|
except: discard
|
||||||
finally: client.close()
|
finally: client.close()
|
||||||
|
@ -34,7 +32,7 @@ proc proxyMedia*(req: jester.Request; url: string): Future[HttpCode] {.async.} =
|
||||||
result = Http200
|
result = Http200
|
||||||
let
|
let
|
||||||
request = req.getNativeReq()
|
request = req.getNativeReq()
|
||||||
client = newAsyncHttpClient(userAgent=mediaAgent)
|
client = newAsyncHttpClient()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
let res = await client.get(url)
|
let res = await client.get(url)
|
||||||
|
@ -116,14 +114,14 @@ proc createMediaRouter*(cfg: Config) =
|
||||||
|
|
||||||
var content: string
|
var content: string
|
||||||
if ".vmap" in url:
|
if ".vmap" in url:
|
||||||
let m3u8 = getM3u8Url(await safeFetch(url, mediaAgent))
|
let m3u8 = getM3u8Url(await safeFetch(url))
|
||||||
if m3u8.len > 0:
|
if m3u8.len > 0:
|
||||||
content = await safeFetch(url, mediaAgent)
|
content = await safeFetch(url)
|
||||||
else:
|
else:
|
||||||
resp Http404
|
resp Http404
|
||||||
|
|
||||||
if ".m3u8" in url:
|
if ".m3u8" in url:
|
||||||
let vid = await safeFetch(url, mediaAgent)
|
let vid = await safeFetch(url)
|
||||||
content = proxifyVideo(vid, cookiePref(proxyVideos))
|
content = proxifyVideo(vid, cookiePref(proxyVideos))
|
||||||
|
|
||||||
resp content, m3u8Mime
|
resp content, m3u8Mime
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import asyncdispatch, httpclient, times, sequtils, json, random
|
import asyncdispatch, httpclient, times, sequtils, json, random
|
||||||
import strutils, tables
|
import strutils, tables
|
||||||
import zippy
|
import zippy
|
||||||
import types, agents, consts, http_pool
|
import types, consts, http_pool
|
||||||
|
|
||||||
const
|
const
|
||||||
maxConcurrentReqs = 5 # max requests at a time per token, to avoid race conditions
|
maxConcurrentReqs = 5 # max requests at a time per token, to avoid race conditions
|
||||||
|
@ -65,7 +65,6 @@ proc fetchToken(): Future[Token] {.async.} =
|
||||||
"accept-encoding": "gzip",
|
"accept-encoding": "gzip",
|
||||||
"accept-language": "en-US,en;q=0.5",
|
"accept-language": "en-US,en;q=0.5",
|
||||||
"connection": "keep-alive",
|
"connection": "keep-alive",
|
||||||
"user-agent": getAgent(),
|
|
||||||
"authorization": auth
|
"authorization": auth
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue