作为一个半路出家的伪程序员,看着 API 手册写一些简单的模块还是可以的,但是碰到这种没有 API 的情况就一脸懵逼了...没什么拿得出手的,愿意帮忙看看的就送 10 域名版 CloudFlarePro(Plesk)长期订阅,产品的具体介绍:https://docs.cloudraft.cn/webhosting/cdn/cloudflare/
目前我在写这个 CloudFlare-Plesk 对接 Zkeys(ThinkPHP)的插件,原本逻辑和 WHMCS 的一样就是开通 pelsk 账户+开通套餐,然后用户需要登录到 plesk 设置 cf 的邮箱和域名。现在这些功能已经都实现了,在 Zkeys 中用户可以: [开通 Plesk 账户] -> [开通订阅] -> [添加 Plesk 域名] -> [生成单点登录链接]
但是想更进一步:用户可以直接在 Zkey 系统中直接绑定 CloudFlare 的账户以及激活 CloudFlare 的域名服务。但是 plesk 的扩展插件是没有 API 的,需要 curl 去模拟用户的浏览器操作。光是添加 cookies 好像还不行,已经把浏览器请求的 header 全部加进去了还是不行...
有兴趣尝试的可以给 10 域名版摸索摸索,如果能通过 curl (bash)完成绑定域名和添加域名的步骤则长期免费提供无限域名版以示感谢。
已有客户 cookies/登陆链接,需要实现
绑定邮箱
激活 Pro 订阅
1
wjhjd163 2020-11-26 05:29:28 +08:00 via Android
会员 ID 1100503
感谢! |
2
ooh 2020-11-26 07:14:30 +08:00
打开 Chrome 调试工具 复制 curl 请求 再找一个 PHP curl 例子照着抄
|
3
zst 2020-11-26 07:59:44 +08:00 via Android
浏览器上面开发者工具里面 network 找到请求右键复制为 curl 然后用 https://curl.trillworks.com/ 这个网站转为 php 代码再改一下 cookies 应该可以了吧
|
4
CloudRaft OP @ooh 试过了,把浏览器中请求复制成 curl 然后改成 php,但是还是不行...另外看到除了主页面的请求外还有 xhr 和 ws,完全进入知识盲区...
``` public function getUserLogin() { $userInfo = $this->checkZkeysStatus(); $plesk_user = md5($userInfo['id'].$this->md5key); $params = "{ \"params\": [ \"--get-login-link\", \"-user\", \"".$plesk_user."\" ]}"; $result = $this->_getRest('cli/admin/call',$params); return $result['stdout']; } protected function getUserCookies() { $login_url = $this->getUserLogin(); $ch = curl_init(); $plesk_cookie_jar = '/tmp/cfpro_cookie_'.$plesk_user.'.txt'; header("Content-Type:text/html;charset=utf-8"); curl_setopt($ch, CURLOPT_URL, $login_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_COOKIEJAR, $plesk_cookie_jar); curl_setopt($ch, CURLOPT_COOKIEFILE, $plesk_cookie_jar); $result = curl_exec($ch); curl_close($ch); return $plesk_cookie_jar; } //就是这一步出问题了 public function bindCF($cfemail,$cfpass) { $userInfo = $this->checkZkeysStatus(); $zoneInfo = M('cloudflare')->find(['user_id' => $userInfo['id']]); $activate_url = '/modules/servershield/index.php/index/'; $post = array('simple'=>1,'cfemail'=>$cfemail, 'cfpass'=>$cfpass); $plesk_cookie_jar = $this->getUserCookies(); header("Content-Type: application/x-www-form-urlencoded"); curl_setopt($ch, CURLOPT_URL, $activate_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); curl_setopt($ch, CURLOPT_COOKIEFILE, $plesk_cookie_jar); $result = curl_exec($ch); curl_close($ch); return json_decode($result, true); } ``` |
5
CloudRaft OP @zst 谢谢回复,这个已经试过了,您可以看看上面我的代码。同时工具里面还有 WS 和 XHR,可能也和请求有关
![4W8u.png]( https://iuimg.com/images/2020/11/25/4W8u.png) ![4Qrf.png]( https://iuimg.com/images/2020/11/25/4Qrf.png) |
6
boboliu 2020-11-26 08:16:27 +08:00 via Android
路过提俩思路:
1. 直接无头大法好 2. 可以考虑给 plesk 服务端抓包看看 |
7
isukkaw 2020-11-26 08:24:22 +08:00 via Android 1
在 V2EX 问如何倒卖 Cloudflare WAF Plus Plan 还行,真当 Cloudflare 销售不上 V2EX ?
|
8
CloudRaft OP @boboliu 我也想着实在搞不定的话就 headless chrome,但是想着又要多个容器,后续维护也挺麻烦的。
话说没怎么接触过这方面,求问从 plesk 那边抓包和浏览器里看请求会有差别吗? |
9
CloudRaft OP @isukkaw plesk 本来就是分销系统啊,servershield 也是我们正规采购的授权,这些进行销售没有任何问题吧?
|
10
boboliu 2020-11-26 08:30:23 +08:00 via Android
@CloudRaft 主要是看你这请求都发到你 self host 的 plesk 服务器了,看起来还挺复杂的,这骨头明显要更硬
从服务端上抓包的话多半是发到 plesk 和 /或 cf 的 api 请求,就有很大的几率更好啃 |
11
donwa 2020-11-26 09:13:03 +08:00
如果是 xhr 的话还好,如果你怀疑还和 ws 有关,php 不好处理,其实可以换个思路。
看你截图域名都是自己的,没有跨站问题。 用 iframe 包含提交页面,插入 js 脚本,模拟点击。(当然要确保没刷单问题) |
12
ChaiXingXing 2020-11-26 10:03:38 +08:00
可以用这个东西试试: https://incarnate.github.io/curl-to-php/
|
13
sxbxjhwm 2020-11-26 10:16:15 +08:00
推荐我自己封装的 Curl 模块 https://github.com/jshensh/phpCurlClass,里边有一个 curl2php.html 可以直接将 curl 命令转成你需要的语句。Curl 命令的获取可以从 Chrome 浏览器开发者工具 --> Network 里抓取到,直接在需要模拟的连接上右键,选择 Copy --> Copy ad cURL (bash) 即可
|
15
tms 2020-11-26 17:03:37 +08:00
五月份在你家买的 CloudFlarePlesk,还是旧的用户中心才能登陆,需要重新注册新版用户中心么。
|
16
tms 2020-11-26 17:18:06 +08:00
我已经绑定过账号了,所以只能去 servershield 关了一下又开了一下,发现 firehose.us-west-2.amazonaws.com 的请求内容除了时间戳以外都是一样的。
也没发现 ws,只有到 modules/servershield/servershield.php?simple=1 这个 POST 有用。 开通域名只要 POST 这个 plesk_zone_name=域名&plesk_rec_name=记录名&act=zone_rec_set 过去就可以。 |
17
tms 2020-11-26 17:21:16 +08:00
实测 ws 在激活操作的时候没有任何作用。绑定因为没有账号测不了。
|
18
tms 2020-11-26 17:27:40 +08:00
实测激活有效
|
19
tms 2020-11-26 17:27:44 +08:00 1
![image.png]( https://i.loli.net/2020/11/26/hVzxwA5jP46uvRX.png)
|
20
CloudRaft OP @tms 感谢大佬!能提供下 my cloudraft cn 的会员 ID 吗?这边帮您开一个账户试试(并奉上无限域名版订阅),这个 post 我尝试用 postman 绑定 CF 的邮箱一直是失败的,大佬帮忙看看吧
|
21
tms 2020-11-26 17:57:59 +08:00
我好像只有老版本的 cloudraft 账户,从旧的用户中心才能登陆,需要重新注册一个新版账户么。
我试了一下激活和取消激活,都不需要 ws, 也不需要管 firehose 的请求 ,这个是行为统计分析用的。 |
23
tms 2020-11-26 18:08:44 +08:00
会员 ID:1101588
|
26
tms 2020-11-26 18:42:51 +08:00
我这里一下就成功了
|
27
tms 2020-11-26 18:42:55 +08:00
|
28
CloudRaft OP @tms 不知道大佬 postman 里面 header 除了 cookies 还有没有其他的?这个 token 我之前没加,我看看有没有办法获取,您有试过在 Linux 里直接 curl 吗?
|
29
tms 2020-11-26 19:10:05 +08:00
我试了一下 linux 的 curl 和 php 都没问题。token 在页头上取。
https://i.loli.net/2020/11/26/BzbNlDR5MEpkjgA.png |