卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章1829本站已运行4109

音乐小说磁力下载器,go后端web版

学习html/css/js/go基础知识所写,此源码是最后一个go版本,
由于go错误处理有问题,不仅语法太啰嗦,还影响代码链式调用,
以后打算主学js不再深入学习go了,后续源码只发nodejs版本,
js不仅语法灵活,还能前后端统一,无论js逆向还是油猴脚本开发,
都离不开js基础,py暂时不打算使用,等js熟练以后会再做考虑!

磁力由于版规所限,前段时间没打算发出去,
由于19号磁力站被封了,正好把源码发出去,
磁力功能暂不可用,仅供大家参考一下,
win成品压缩包未加密,go源码压缩包密码:52pj
go源码.zip
d221cff61c0eacfa4367887e366c9e4d.zip (188.68 KB)
 
package main   //🔴🟠🟡🟢🔵🟣🟤⚫⚪
import(`io`;`embed`;`regexp`;`strconv`;`strings`;`runtime`;`net/url`;`os/exec`;`net/http`;`crypto/tls`)
type s struct{}
type h map[string]string
//go:embed 1.html 1.jpeg 1.woff
var fs embed.FS
var(h1=h{`User-Agent`:`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36`}
 
h2=h{`Content-Type`:`application/x-www-form-urlencoded`,
`User-Agent`:`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36`}
 
a5=h{`Referer`:`http://www.22a5.com`,
`Content-Type`:`application/x-www-form-urlencoded; charset=UTF-8`,
`User-Agent`:`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36`}
 
sdyd=h{`Cookie`:`8av_t=5; 8av_cdn=%2Fstatic%2F; 8avlatest=13ok; __captcha=772243930a371705134657; 8avauth=%0121705134536866bIjI0Mzk0NTRcdDg3MmZmZmNkXHRsbGFjcnJcdFx0bGxhY3JyQGhvdG1haWwuY29tXHQxNzA3NzI2NTM2XHQi`,
`User-Agent`:`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36`}
 
r1=regexp.MustCompile(`共有<span>(\d+)</span>`)
r2=regexp.MustCompile(`<div class="name"><a href="/mp3/([^\.]+).html" target="_mp3">(.+?)</a></div>`)
r3=regexp.MustCompile(`"url":"(.+?)"`)
 
r4=regexp.MustCompile(`找到 (\d+) 个结果`)
r5=regexp.MustCompile(`<div class="sc-title">(?:<span class="gray">\[全本\]</span>)?<span><a href="/html/([^\.]+).html" target="_blank">(.*?)</a></span> / <span><a href="[^"]+" class="green" title="[^"]+">(.*?)</a>`)
r6=regexp.MustCompile(`<li>⑵ <a href="([^"]+)"`)
 
r7=regexp.MustCompile(`共(\d+)页`)
r8=regexp.MustCompile(`<a class="wdc_a" style="cursor:pointer">\s+<div class="wdc_img">\s+<img src="[^"]+"/>\s+</div>\s+<h1 class="wdc_dis"> <strong><span style="color:#666666;">(.*?)</span></strong></h1>\s+<h2 class="wdc_dis"><span style="color:#00CD00;"><strong>Size:<span style="color:#FFFFFF;background-color:#1e9fff;"> ([^\&]+)`)
r9=regexp.MustCompile(`hash":"([^"]+)`))
 
 
func main(){
switch runtime.GOOS{
case `darwin`:cc(`open http://localhost/`)
case `linux`:cc(`x-www-browser http://localhost/`)
case `windows`:cc(`cmd /c start http://localhost/`)}
http.ListenAndServe(`:80`,&s{})}
 
 
func (S *s)ServeHTTP(w http.ResponseWriter,r *http.Request){
r.ParseForm()
switch(r.URL.Path){
case `/`:
f,_:=fs.Open(`1.html`)
defer f.Close()
w.Header().Set(`Content-Type`,`text/html`)
io.Copy(w,f)
 
case `/favicon.ico`:
http.Redirect(w,r,`https://www.52pojie.cn/favicon.ico`,301)
 
case `/1.jpeg`:
f,_:=fs.Open(`1.jpeg`)
defer f.Close()
w.Header().Set(`Content-Type`,`image/jpeg`)
io.Copy(w,f)
 
case `/1.woff`:
f,_:=fs.Open(`1.woff`)
defer f.Close()
w.Header().Set(`Content-Type`,`font/woff`)
io.Copy(w,f)
 
case `/music`:
if r.Method==`GET`{u:=r3.FindStringSubmatch(c2(a5,`http://www.22a5.com/js/play.php`,`id=`+r.Form[`id`][0]+`&type=music`))
     http.Redirect(w,r,strings.ReplaceAll(u[1],`\`,``),302);return}
b:=c1(h1,`http://www.22a5.com/so/`+url.PathEscape(r.Form[`k`][0])+`/`+r.Form[`v`][0]+`.html`)
s1,_:=strconv.Atoi(r1.FindStringSubmatch(b)[1])
s2:=s1/68
if s2%68>0{s2++}
s3,_:=strconv.Atoi(r.Form[`v`][0])
if s3>s2{return}
s:=r2.FindAllStringSubmatch(b,-1)
io.WriteString(w,strconv.Itoa(s2)+` `)
for i:=0;i<len(s);i++{io.WriteString(w,s[i][1]+` `+s[i][2]+` `)}
 
case `/book`:
if r.Method==`GET`{http.Redirect(w,r,c3(sdyd,`https://m.sdyd.org`+r6.FindStringSubmatch(c1(h1,`https://m.sdyd.org/downpage/`+r.Form[`id`][0]+`/?sure=2`))[1]),302);return}
s1,_:=strconv.Atoi(r.Form[`v`][0])
if s1>1{return}
s:=r5.FindAllStringSubmatch(c2(h2,`https://m.sdyd.org/search/`,`keyword=`+r.Form[`k`][0]),-1)
io.WriteString(w,strconv.Itoa(s1)+` `)
for i:=0;i<len(s);i++{io.WriteString(w,s[i][1]+` `+s[i][2]+`●`+s[i][3]+` `)}
 
case `/magnet`:
if r.Method==`GET`{http.Redirect(w,r,`magnet:?xt=urn:btih:`+r9.FindStringSubmatch(c2(h2,`http://124.223.172.237:3535/ajax.php`,`typenum=4&md5hash=`+r.Form[`id`][0]+`&sjk=1`))[1],302);return}
b:=c1(h1,`http://124.223.172.237:3535/listen.php/?name=`+url.PathEscape(r.Form[`k`][0])+`&page=`+r.Form[`v`][0])
s1,_:=strconv.Atoi(r1.FindStringSubmatch(b)[1])
s2,_:=strconv.Atoi(r.Form[`v`][0])
if s2>s1{return}
s:=r8.FindAllStringSubmatch(b,-1)
for i:=0;i<len(s);i++{io.WriteString(w,s[i][1]+` `+s[i][2]+`●`+s[i][3]+` `)}
default:http.NotFound(w,r)}}
 
 
func cc(s string){
c:=strings.Fields(s)
exec.Command(c[0],c[1:]...).Start()}
 
 
func c1(h h,u string)string{
q,_:=http.NewRequest(`GET`,u,nil)
for k,v:=range h{q.Header.Set(k,v)}
p,_:=http.DefaultClient.Do(q)
defer p.Body.Close()
b,_:=io.ReadAll(p.Body)
defer p.Body.Close()
return string(b)}
 
 
func c2(h h,u,b string)string{
c:=&http.Client{Transport:&http.Transport{DisableKeepAlives:true,TLSClientConfig:&tls.Config{InsecureSkipVerify:true}}}
q,_:=http.NewRequest(`POST`,u,strings.NewReader(b))
for k,v:=range h{q.Header.Set(k,v)}
p,_:=c.Do(q)
s,_:=io.ReadAll(p.Body)
defer p.Body.Close()
return string(s)}
 
 
func c3(h h,u string)string{
c:=&http.Client{Transport:&http.Transport{DisableKeepAlives:true,TLSClientConfig:&tls.Config{InsecureSkipVerify:true}},CheckRedirect:func(req *http.Request,via []*http.Request)error{return http.ErrUseLastResponse}}
q,_:=http.NewRequest(`GET`,u,nil)
for k,v:=range h{q.Header.Set(k,v)}
p,_:=c.Do(q)
defer p.Body.Close()
return p.Header.Get(`Location`)}
html源码中用的免费临时图床,如果后续背景图片过期了,或者觉得背景图片加载缓慢,可以把html源码中的背景图地址替换为1.jpeg就行了,乱码字体库替换为1.woff,不用在地址前加http前缀,html的修改需要重新编译,win程序中已打包这几个外部文件,但图片地址忘改暂时没法修改了,感兴趣的自行修改重新编译一下,我就不重新编辑发帖了,对移动端也做了页面自适应,可以通过内网直接访问,win用户在cmd中用ipconfig就可以看到主机ip,ipv4地址一栏中以192.168开头的就是,手机浏览器输入就可以访问

代码中有个小bug,一开始没注意到,但不影响正常使用,在根据歌曲数/68进行分页计算时,错误的用整除后的结果取余,结果就是当歌曲数正好是68的倍数,总页数也会多加一页,虽然这种概率很小,也算是一个小问题,下面是需要修改的部分:
s1,_:=strconv.Atoi(r1.FindStringSubmatch(b)[1])
s2:=s1/68
if s2%68>0{s2++}
s3,_:=strconv.Atoi(r.Form[`v`][0])
if s3>s2{return}
s:=r2.FindAllStringSubmatch(b,-1)
io.WriteString(w,strconv.Itoa(s2)+` `)

把上面这段代码替换为下面这段代码:
s1,_:=strconv.Atoi(r1.FindStringSubmatch(b)[1])
if s1%68>0{s1=s1/68+1}else{s1=s1/68}
s2,_:=strconv.Atoi(r.Form[`v`][0])
if s2>s1{return}
s:=r2.FindAllStringSubmatch(b,-1)
io.WriteString(w,strconv.Itoa(s1)+` `)
卓越飞翔博客
上一篇: PHP仿twitter
下一篇: Java安全 CC链1分析
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏