跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 求助 关于 PHP 中 curl 模拟浏览器提交 POST 请求 [帮忙解答送 CloudFlarePro 订阅]
未分類
24 11 月 2020

求助 关于 PHP 中 curl 模拟浏览器提交 POST 请求 [帮忙解答送 CloudFlarePro 订阅]

求助 关于 PHP 中 curl 模拟浏览器提交 POST 请求 [帮忙解答送 CloudFlarePro 订阅]

資深大佬 : CloudRaft 5

前情

作为一个半路出家的伪程序员,看着 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/登陆链接,需要实现

  1. 绑定邮箱 求助 关于 PHP 中 curl 模拟浏览器提交 POST 请求 [帮忙解答送 CloudFlarePro 订阅]

  2. 激活 Pro 订阅 求助 关于 PHP 中 curl 模拟浏览器提交 POST 请求 [帮忙解答送 CloudFlarePro 订阅]

领取、登录及配置

  1. https://my.cloudraft.cn 注册后(无需实名)绑定邮箱,注册时可以看到自己的会员 ID
  2. 访问https://my.cloudraft.cn/user/cfpro/registerPlesk 出现 result=true 表明开通 plesk 成功
  3. 本贴中回复会员 ID,我会尽快给开通 10 域名套餐(套餐不设有效期),希望大佬们帮帮忙,另外如果不是要帮忙解决问题的话就不要领取了,不设限制是相信各位。
  4. 访问https://my.cloudraft.cn/user/cfpro/getUserLogin 获取单点登录链接
  5. cloudflare 插件管理页:https://plesk-eu-6.cloudraft.cn:8443/modules/servershield/index.php 这里需要进行(1)绑定 cloudflare 账户(2)将域名的 Pro 订阅激活
大佬有話說 (30)

  • 資深大佬 : wjhjd163

    会员 ID 1100503
    感谢!

  • 資深大佬 : ooh

    打开 Chrome 调试工具 复制 curl 请求 再找一个 PHP curl 例子照着抄

  • 資深大佬 : zst

    浏览器上面开发者工具里面 network 找到请求右键复制为 curl 然后用 https://curl.trillworks.com/ 这个网站转为 php 代码再改一下 cookies 应该可以了吧

  • 主 資深大佬 : CloudRaft

    @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);
    }
    “`

  • 主 資深大佬 : CloudRaft

    @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)

  • 資深大佬 : boboliu

    路过提俩思路:
    1. 直接无头大法好
    2. 可以考虑给 plesk 服务端抓包看看

  • 資深大佬 : isukkaw

    在 V2EX 问如何倒卖 Cloudflare WAF Plus Plan 还行,真当 Cloudflare 销售不上 V2EX ?

  • 主 資深大佬 : CloudRaft

    @boboliu 我也想着实在搞不定的话就 headless chrome,但是想着又要多个容器,后续维护也挺麻烦的。
    话说没怎么接触过这方面,求问从 plesk 那边抓包和浏览器里看请求会有差别吗?

  • 主 資深大佬 : CloudRaft

    @isukkaw plesk 本来就是分销系统啊,servershield 也是我们正规采购的授权,这些进行销售没有任何问题吧?

  • 資深大佬 : boboliu

    @CloudRaft 主要是看你这请求都发到你 self host 的 plesk 服务器了,看起来还挺复杂的,这骨头明显要更硬

    从服务端上抓包的话多半是发到 plesk 和 /或 cf 的 api 请求,就有很大的几率更好啃

  • 資深大佬 : donwa

    如果是 xhr 的话还好,如果你怀疑还和 ws 有关,php 不好处理,其实可以换个思路。

    看你截图域名都是自己的,没有跨站问题。

    用 iframe 包含提交页面,插入 js 脚本,模拟点击。(当然要确保没刷单问题)

  • 資深大佬 : ChaiXingXing

    可以用这个东西试试: https://incarnate.github.io/curl-to-php/

  • 資深大佬 : sxbxjhwm

    推荐我自己封装的 Curl 模块 https://github.com/jshensh/phpCurlClass,里边有一个 curl2php.html 可以直接将 curl 命令转成你需要的语句。Curl 命令的获取可以从 Chrome 浏览器开发者工具 –> Network 里抓取到,直接在需要模拟的连接上右键,选择 Copy –> Copy ad cURL (bash) 即可

  • 主 資深大佬 : CloudRaft

    @donwa 666 !这个好像可行!我这就去试试看,如果需要 CF 的订阅随时 @我~

  • 資深大佬 : tms

    五月份在你家买的 CloudFlarePlesk,还是旧的用户中心才能登陆,需要重新注册新版用户中心么。

  • 資深大佬 : tms

    我已经绑定过账号了,所以只能去 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 过去就可以。

  • 資深大佬 : tms

    实测 ws 在激活操作的时候没有任何作用。绑定因为没有账号测不了。

  • 資深大佬 : tms

    实测激活有效

  • 資深大佬 : tms

    ![image.png]( https://i.loli.net/2020/11/26/hVzxwA5jP46uvRX.png)

  • 主 資深大佬 : CloudRaft

    @tms 感谢大佬!能提供下 my cloudraft cn 的会员 ID 吗?这边帮您开一个账户试试(并奉上无限域名版订阅),这个 post 我尝试用 postman 绑定 CF 的邮箱一直是失败的,大佬帮忙看看吧

  • 資深大佬 : tms

    我好像只有老版本的 cloudraft 账户,从旧的用户中心才能登陆,需要重新注册一个新版账户么。
    我试了一下激活和取消激活,都不需要 ws,
    也不需要管 firehose 的请求 ,这个是行为统计分析用的。

  • 主 資深大佬 : CloudRaft

    @tms 是需要新注册一个的,辛苦啦!

  • 資深大佬 : tms

    会员 ID:1101588

  • 主 資深大佬 : CloudRaft

    @tms 已开通无限域名版,麻烦看看 curl 绑定 CF 和激活

  • 資深大佬 : tms

    @CloudRaft 好的我看一下

  • 資深大佬 : tms

    我这里一下就成功了

  • 資深大佬 : tms

    https://i.loli.net/2020/11/26/PRblTDhwSZz4kLA.png

  • 主 資深大佬 : CloudRaft

    @tms 不知道大佬 postman 里面 header 除了 cookies 还有没有其他的?这个 token 我之前没加,我看看有没有办法获取,您有试过在 Linux 里直接 curl 吗?

  • 資深大佬 : tms

    我试了一下 linux 的 curl 和 php 都没问题。token 在页头上取。
    https://i.loli.net/2020/11/26/BzbNlDR5MEpkjgA.png

  • 主 資深大佬 : CloudRaft

    @tms 搞定了,主要问题是要加 token,再次感谢!

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具