bilibili-API-collect/login/login_action/SMS.md
2022-01-28 20:07:25 +08:00

7.1 KiB
Raw Blame History

短信登录

web端短信登录流程

  1. 完成人机验证
  2. 发送短信,使用国际地区代码cid+手机号码tel+登录密钥key+极验challenge+验证结果validate+验证结果seccode
  3. 提交短信验证码以验证登录操作,使用国际地区代码cid+手机号码tel+短信验证码smsCode


获取国际地区代码web端

http://passport.bilibili.com/web/generic/country/list

请求方式GET

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
data obj 数据本体

data对象:

字段 类型 内容 备注
common array 常用国家或地区
others array 其他国家或地区

data中的commonothers数组:

类型 内容 备注
0 obj 国家或地区1
n obj 国家或地区(n+1)
…… obj …… ……

commonothers数组中的对象:

字段 类型 内容 备注
id num 国际代码值
cname str 国家或地区名
country_id str 国家或地区区号

示例:

curl 'http://passport.bilibili.com/web/generic/country/list'
查看响应示例:
{
    "code": 0,
    "data": {
        "common": [
            {
                "id": 1,
                "cname": "中国大陆",
                "country_id": "86"
            },
            {
                "id": 5,
                "cname": "中国香港特别行政区",
                "country_id": "852"
            },
            …………
        ],
        "others": [
            {
                "id": 22,
                "cname": "阿富汗",
                "country_id": "93"
            },
            {
                "id": 20,
                "cname": "阿尔巴尼亚",
                "country_id": "355"
            },
            …………
        ]
    }
}

发送短信验证码web端

http://passport.bilibili.com/x/passport-login/web/sms/send

请求方式POST

短信发送CD时间为60s

短信验证码超时时间为5min

正文参数( application/x-www-form-urlencoded

参数名 类型 内容 必要性 备注
tel num 手机号码 必要
cid num 国际地区代码 必要
token str 在获取gt,challenge处url有 必要
challenge str 极验challenge 必要 从B站API获取
validate str 极验结果 必要 从极验获取
seccode str 极验结果+` jordan` 必要

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
-400请求错误
1002手机号格式错误
86203短信发送次数已达上限
1003验证码已经发送
1025该手机号在哔哩哔哩有过永久封禁记录无法再次注册或绑定新账号
2400登录秘钥错误
2406验证极验服务出错
message str 错误信息 成功为0
data obj 数据 内含captcha_key

captcha_key在下方传参时需要,请备用. 示例:

例如手机号为13888888888国际id为1中国大陆,登录秘钥为aabbccdd极验challenge为2333,极验结果为666666,进行发送短信验证码操作

curl 'http://passport.bilibili.com/web/sms/general/v2/send' \
--data-urlencode 'tel=13888888888' \
--data-urlencode 'cid=1' \
--data-urlencode 'type=21' \
--data-urlencode 'captchaType=6' \
--data-urlencode 'key=aabbccdd' \
--data-urlencode 'challenge=2333' \
--data-urlencode 'validate=666666' \
--data-urlencode 'seccode=666666|jordan'
查看响应示例:
{"code":0,
    "message":"0",
    "ttl":1,
    "data":{"captcha_key":"7542f109c3318d74847626495c68c321"}
    }

使用短信验证码登录web端

http://passport.bilibili.com/x/passport-login/web/login/sms

请求方式POST

验证登录成功后会进行设置以下cookie项

DedeUserID DedeUserID__ckMd5 SESSDATA bili_jct

正文参数( application/x-www-form-urlencoded

参数名 类型 内容 必要性 备注
cid num 国际地区代码 必要
tel num 手机号码 必要
code num 短信验证码 必要 超时时间为5min
captcha_key str 上方发送短信验证码时的一个参数 必要
goUrl str 跳转url 非必要 默认为https://www.bilibili.com
keep str 未知 非必要 默认为true

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
-400请求错误
1006请输入正确的短信验证码
1007短信验证码已过期
message str 错误信息
data obj 信息本体

data对象:

字段 类型 内容 备注
is_new bool false 未知,估计是未注册时自动注册新用户
status num 0 未知,可能0就是成功吧
url str 跳转url 默认为https://www.bilibili.com

示例:

使用手机号13888888888,短信验证码为123456,进行验证登录操作

curl 'https://passport.bilibili.com/web/login/rapid' 
--data-urlencode 'cid=1' \
--data-urlencode 'tel=13888888888' \
--data-urlencode 'smsCode=123456'
查看响应示例:
{
  "code": 0,
  "data": {
    "is_new": false,
    "status": 0,
    "url": "https://space.bilibili.com"
  }
}

响应头部抓包信息:

可明显看见设置了几个cookie填入浏览器即可成功登录

查看响应示例:
HTTP/1.1 200 OK
Date: Mon, 13 Jul 2020 09:57:33 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 78
Connection: keep-alive
Server: Apache-Coyote/1.1
Set-Cookie: DedeUserID=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
Set-Cookie: DedeUserID__ckMd5=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
Set-Cookie: SESSDATA=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/; HttpOnly
Set-Cookie: bili_jct=***; Domain=.bilibili.com; Expires=Sat, 18-Jul-2020 09:57:57 GMT; Path=/
Expires: Mon, 13 Jul 2020 09:57:32 GMT
Cache-Control: no-cache
X-Cache-Webcdn: BYPASS from jd-sxhz-dx-w-01