define('COOKIE', './cookie.txt');
define('MYURL', 'https://register.pandi.or.id/main');
function getUrl($url, $method='', $vars='', $open=false) {
// 设置HTTP请求头部
$agents = 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16';
$header_array = array(
"Via: 1.1 register.pandi.or.id",
"Keep-Alive: timeout=15,max=100",
);
static $cookie = false;
if (!$cookie) {
$cookie = session_name() . '=' . time(); // 如果还没有会话cookie,就创建一个
}
$referer = 'https://register.pandi.or.id/main'; // 请求来源URL
$ch = curl_init();
if ($method == 'post') { // 如果是POST请求,设置POST参数
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$vars");
}
curl_setopt($ch, CURLOPT_HEADER, 1); // 返回HTTP头信息
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array); // 设置HTTP头信息
curl_setopt($ch, CURLOPT_USERAGENT, $agents);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 把返回的数据存到变量中而不是直接输出
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 5); // 允许跳转(最多5次)
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // 最多允许10次跳转
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE); // 把会话cookie存到文件中
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE); // 从文件中加载会话cookie
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不验证SSL证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
$buffer = curl_exec($ch); // 执行curl请求
if (curl_errno($ch)) {
echo "error " . curl_error($ch); // 如果curl出错,输出错误信息
die;
}
curl_close($ch);
return $buffer; // 返回请求结果
}
function save_captcha($ch) {
// 设置HTTP请求头部
$agents = 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16';
$url = "https://register.pandi.or.id/jcaptcha";
static $cookie = false;
if (!$cookie) {
$cookie = session_name() . '=' . time(); // 如果还没有会话cookie,就创建一个
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $agents);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE); // 把会话cookie存到文件中
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE); // 从文件中加载会话cookie
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // 返回二进制数据流
$data = curl_exec($ch); // 执行curl请求,获取验证码图片
curl_close($ch);
$captcha_tmpfile = './captcha/captcha-' . rand(1000, 10000) . '.jpg'; // 生成临时文件名
$fp = fopen($captcha_tmpfile, 'w'); // 在临时文件中保存验证码图片
fwrite($fp, $data);
fclose($fp);
return $captcha_tmpfile; // 返回验证码图片的路径
}
if (isset($_POST['captcha'])) { // 如果已经提交了验证码
$id = "yudohartono";
$pw = "mypassword";
$postfields = "navigation=authenticate&login-type=registrant&username=" . $id . "&password=" . $pw . "&captcha_response=" . $_ <form action='' method='POST'>
<img src='<?php echo $captcha ?>' />
<input type='text' name='captcha' value=''>
<input type='submit' value='proses'>
</form>";
如果无法读取'cookie.txt'并且无法写入'cookie.txt',则显示"cookie fail to read"。然后将'../pandi/'文件夹的权限设置为'777'。
这是cookie.txt的内容:
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
register.pandi.or.id FALSE / FALSE 0 JSESSIONID 05CA8241C5B76F70F364CA244E4D1DF4
提交表单后显示:
HTTP/1.1 200 OK Date: Wed, 27 Apr 2011 07:38:08 GMT Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.4; Tomcat-5.0.28/JBoss-4.0.0 (build: CVSTag=JBoss_4_0_0 date=200409200418) Content-Length: 0 Via: 1.1 register.pandi.or.id Content-Type: text/plain X-Pad: avoid browser bug
如果没有错误"Captcha invalid",则一直无法成功登录到pandi。我的脚本出了什么问题?
我不想破解验证码,但我希望能够在我的网页上显示验证码,并让用户从我的网页上输入验证码,使用户可以自动注册dotID域名。