我们有一些网站在不同的 CMS(Drupal、Joomla 等)上运行。我们希望这些站点共享一个 phpbb 论坛(在不同的域上),并希望在每个站点上注册的人也能在论坛上自动创建一个用户帐户。
为此,我编写了一个脚本,它发送一个php curl request
模仿 phpbb 的注册过程的脚本。
首先,我厌倦了一个简单的注册表单,它运行良好。但由于论坛使用Captcha
我需要在我的脚本中添加一个表单,以便用户可以输入Captcha string
. 而这里的事情并没有那么顺利。经过数小时的检查phpbb
代码文件后,我设法或多或少地找出了问题所在,尽管我有限的 phhbb 知识阻止我找到解决方案,所以我想我会在这里寻求帮助。
我的脚本发送 curl 请求以ucp.php?mode=register
通过"agree to terms"
屏幕,解析结果以获取令牌和创建时间,然后发送另一个请求。返回值是带有验证码图像的注册屏幕。除了没有图像可以被视为url
图像脚本是相对的,所以我改变了输出结果并制作了url
一个absolute url
.
所以而不是
./ucp.php?mode=confirm&confirm_id=xxxxxxxxxxxxx&type=1
我将代码更改为
http://www.mydomain.com/phpbb3/ucp.php?mode=confirm&confirm_id=xxxxxxxxxxxxx&type=1
并获取验证码图像(xxxxxxxxxxxxx
每次confirm_id string
都会更改)。
这就是我碰到砖墙的地方。生成的图像永远不是正确的验证码字符串。
如果我var_dump
在其中的$captcha
变量ucp_register.php
可以看到正确的字符串,它永远不是验证码图像中的那个。我在输出某些变量的文件中放置了一些代码,phpbb
以帮助我了解幕后发生的事情。这是我设法收集的内容,希望有人能告诉我为什么会发生这种情况,或者至少为我指明正确的方向:
- In
captcha_abstract.php
和captcha_gd.php
是变量$this->confirm_code
。当我在这两种情况下将其转储到文件中时,我可以看到正确的验证码(与输出$captcha var
in时相同ucp_register.php
)。 ucp_confirm.php
里面有一个$captcha->code
var ,它保存了我在输出验证码图像时看到的字符串。- 当我通过浏览器正常完成注册过程
$this->confirm_code
并$captcha->code
持有相同的值时。
所以很明显,更改ucp.php?mode=confirm
上面的行会导致这种情况,但我无法避免,好像我不这样做我没有得到验证码图像。