Harlber / Moose

Android app
http://www.acfun.tv/v/list110/index.htm
83 stars 26 forks source link

mac下charles抓取AcFun接口数据分析 #41

Closed xingstarx closed 8 years ago

xingstarx commented 8 years ago

以漫画小说为例进行分析 http://api.aixifan.com/searches/channel?channelIds=74&pageNo=1&pageSize=20&sort=5 这个是新的接口信息 原来的接口如下 http://api.acfun.tv/apiserver/content/channel?orderBy=0&channelId=75&pageSize=20&pageNo=1

变动了Host,以及请求的searches/channel 同样还包括对应的参数channelId --> channelIds , orderBy --> sort

接口修改为新的之后,同样还是抓取不到数据,结果显示的 {"code":422003,"message":"deviceType缺失"}

通过对charles记录的url进行分析,发现了一个请求url,觉得问题出在这个地方,这个地方的请求数据是携带有请求头的,而这些请求头数据跟其他的api不一样,应该属于AcFun自己添加的header,用来防止用户恶意抓取数据的

下面列出来这个特殊url的请求形式: 完整url为 http://api.aixifan.com/open/phone/source

GET /open/phone/source HTTP/1.1
uid 0
If-Modified-Since   Wed, 21 Sep 2016 13:04:13 GMT+00:00
market  xiaomi
appVersion  4.3.0
deviceType  1
If-None-Match   "95f56023-742e-485c-9fdd-e4209d8d1fdd"
User-agent  acvideo core
udid    1bfbeabd-bc43-32fa-ba2a-db535c1a7542
resolution  720x1280
productId   2000
Host    api.aixifan.com
Connection  Keep-Alive
Accept-Encoding gzip

由此我可以推测,这些特殊的参数是必须使用的,不然服务器端验证的时候,不会给你返回正确的数据,经过测试也的确如此(主要是这方面的经验比较多,哈哈,一般情况下,是很难让我破解不了的)

另外还有一个接口也有类似的数据可以参考 url为 http://api.aixifan.com/offlines/checkOffline

GET /offlines/checkOffline HTTP/1.1
uid 0
If-Modified-Since   Wed, 21 Sep 2016 13:04:13 GMT+00:00
market  xiaomi
appVersion  4.3.0
deviceType  1
If-None-Match   "707ccc56-5b47-4836-b81b-e30ca20754eb"
User-agent  acvideo core
udid    1bfbeabd-bc43-32fa-ba2a-db535c1a7542
resolution  720x1280
productId   2000
Host    api.aixifan.com
Connection  Keep-Alive
Accept-Encoding gzip

之后在postman上面测试分析,进一步确定需要那几个特定的header数据

market  xiaomi
appVersion  4.3.0
deviceType  1

我们只需要在每次的请求头上面加入上面的三个参数,就可以解决数据获取不到的问题,从而避免被AcFun的服务器给干掉

当然了,毕竟接口还有很多,这个issue长期维护,还是有必要进一步优化调整的

xingstarx commented 8 years ago

文章明细接口

http://api.aixifan.com/articles/3123106
xingstarx commented 8 years ago

42

Harlber commented 8 years ago

Thx.

Harlber commented 8 years ago

also see #35