导航:首页 > 编程语言 > php模拟登陆网页

php模拟登陆网页

发布时间:2022-07-06 03:58:47

php curl 模拟登录并获取数据实例详解

PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。
代码实战
先来看登录部分的代码:
//模拟登录
function
login_post($url,
$cookie,
$post)
{
$curl
=
curl_init();//初始化curl模块
curl_setopt($curl,
CURLOPT_URL,
$url);//登录提交的地址
curl_setopt($curl,
CURLOPT_HEADER,
0);//是否显示头信息
curl_setopt($curl,
CURLOPT_RETURNTRANSFER,
0);//是否自动显示返回的信息
curl_setopt($curl,
CURLOPT_COOKIEJAR,
$cookie);
//设置Cookie信息保存在指定的文件中
curl_setopt($curl,
CURLOPT_POST,
1);//post方式提交
curl_setopt($curl,
CURLOPT_POSTFIELDS,
http_build_query($post));//要提交的信息
curl_exec($curl);//执行cURL
curl_close($curl);//关闭cURL资源,并且释放系统资源
}
函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。
接下来如果登录成功后,我们要获取登录成功后的页面信息。
//登录成功后获取数据
function
get_content($url,
$cookie)
{
$ch
=
curl_init();
curl_setopt($ch,
CURLOPT_URL,
$url);
curl_setopt($ch,
CURLOPT_HEADER,
0);
curl_setopt($ch,
CURLOPT_RETURNTRANSFER,
1);
curl_setopt($ch,
CURLOPT_COOKIEFILE,
$cookie);
//读取cookie
$rs
=
curl_exec($ch);
//执行cURL抓取页面内容
curl_close($ch);
return
$rs;
}
函数get_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。
我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。
//设置post的数据
$post
=
array
(
'email'
=>
'oschina账户',
'pwd'
=>
'oschina密码',
'goto_page'
=>
'/my',
'error_page'
=>
'/login',
'save_login'
=>
'1',
'submit'
=>
'现在登录'
);
//登录地址
$url
=
"http://m.oschina.net/action/user/login";
//设置cookie保存路径
$cookie
=
dirname(__FILE__)
.
'/cookie_oschina.txt';
//登录后要获取信息的地址
$url2
=
"http://m.oschina.net/my";
//模拟登录
login_post($url,
$cookie,
$post);
//获取登录页的信息
$content
=
get_content($url2,
$cookie);
//删除cookie文件
@
unlink($cookie);
//匹配页面信息
$preg
=
"/<td
class='portrait'>(.*)<\/td>/i";
preg_match_all($preg,
$content,
$arr);
$str
=
$arr[1][0];
//输出内容
echo
$str;
使用总结
1、初始化curl;
2、使用curl_setopt设置目标url,和其他选项;
3、curl_exec,执行curl;
4、执行后,关闭curl;
5、输出数据。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

㈡ 怎样用php中的curl模拟登陆

在我的博客《PHPcURL模拟登录与采集分析过程详解》做了详细的介绍,步骤有:
1.访问目标网站
2.打开Firebug(快捷键:F12)
3.清除【Cookie】
4.重新访问目标网站
5.设置【网络】为[保持]状态
6.填写表单,提交登录请求
7.利用【网络】,分析提交信息
8.复制请求的cURL命令
9.分析命令传输的参数与Cookie和前面页面响应内容的关联性
10.如果遇到Cookie和响应内容都无法查找到的参数,Ctrl+S保存当前页面为全部,利用文本搜索该参数的位置
11.利用cURL命令组装模拟登录程序

详情请参考博客内容:http://www.zjmainstay.cn/php-curl-step

㈢ php模拟登陆知乎

这种模拟登陆其实很简单,php的话主要用curl来实现。仔细研究一下你要抓的站具体是怎么实现用户登录的,可以用wireshark或者burpsuite(建议用后者)抓包看看整个过程都有那几次请求,每次请求都发送了哪些数据,构造好发给他就可以实现登录了。
之后获取个人信息就很容易了,找找php解析html库,或者最简单粗暴的就是字符串截取函数加正则表达式,把你想要的数据提取出来就好了。
对于你给出的这种验证码属于非常容易识别的验证码了,基本的识别原理参看使用Canvas进行验证码识别。
当然比较蛋疼的问题就是网页编码问题,经常爬过来全是乱码,网上找找看转码的方法,都试一下,这是一门玄学,能不能成功看你人品和耐心吧。

㈣ php模拟登陆,跳转页面问题

把你的登录信息保存在一个session中,如

login.php

<?php

//表单提交后...

$posts=$_POST;

//清除一些空白符号

foreach($postsas$key=>$value){

$posts[$key]=trim($value);

}

$password=md5($posts["password"]);

$username=$posts["username"];


$query="SELECT`username`FROM`user`WHERE`password`='$password'AND`username`='$username'";

//取得查询结果

$userInfo=$DB->getRow($query);


if(!empty($userInfo)){

//当验证通过后,启动Session

session_start();

//注册登陆成功的admin变量,并赋值true

$_SESSION["admin"]=true;

}else{

die("用户名密码错误");

}

?>



<?php

// 防止全局变量造成安全隐患

$admin = false;

// 启动会话,这步必不可少

session_start();

// 判断是否登陆

if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true) {

echo "您已经成功登陆";

} else {

// 验证失败,将 $_SESSION["admin"] 置为 false

$_SESSION["admin"] = false;

die("您无权访问");

}

?>

㈤ 在PHP中如何伪造http头进行模拟登陆

用php模拟登陆主要分为三部分 1. post数据。 2.根据返回的http头,从中截出cookie段。 3.伪造http头发送请求。 我这里以用php抓取163相册的需要密码才能访问的目录为例。 <?php function posttohost($url, $data) //post数据 { $url = parse_url($url); if (!$url) return "couldn't parse url"; if (!isset($url['port'])) { $url['port'] = ""; } if (!isset($url['query'])) { $url['query'] = ""; } $encoded = ""; foreach ($data as $k=>$v) { $encoded .= ($encoded ? "&" : ""); $encoded .= rawurlencode($k)."=".rawurlencode($v); } $fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80); if (!$fp) return "Failed to open socket to $url[host]"; fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? "?" : "", $url['query'])); fputs($fp, "Host: $url[host]\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\n"); fputs($fp, "Content-length: " . strlen($encoded) . "\n"); fputs($fp, "Connection: close\n\n"); fputs($fp, "$encoded\n"); $line = fgets($fp,1024); if (!eregi("^HTTP/1\.. 200", $line)) return; $results = ""; $inheader = 1; while(!feof($fp)) { $line = fgets($fp,1024); if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0; } elseif ($inheader) { $results .= $line; } } fclose($fp); return $results; }

㈥ php 模拟登录,post到多个地址怎么做

$url = ''; //POST地址
$password = ''; //密码
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'username='.$_COOKIE['username'].'&password='.$password);
/**
* 如果$url是https则需要取消下面两行注释
* curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
* curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
*/
curl_exec($curl);
curl_close($curl);

㈦ PHP CURL 实现 模拟登陆 为何目标网站没有登陆的反应呢 高手请进

1、表单登陆地址不对

2、表单名不对,名字是username 和 password 没有ls

<?php
$curl=curl_init();
$cookie_jar=tempnam('./tmp','cookie');
curl_setopt($curl,CURLOPT_URL,'http://bbs.miaozhan360.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes');//这里写上处理登录的界面
curl_setopt($curl,CURLOPT_POST,1);
$request='username=wonderwiller&password=wonderwiller';
curl_setopt($curl,CURLOPT_POSTFIELDS,$request);//传递数据
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_jar);//把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//设定返回的数据是否自动显示
curl_setopt($curl,CURLOPT_HEADER,false);//设定是否显示头信息
curl_setopt($curl,CURLOPT_NOBODY,false);//设定是否输出页面内容
$r=curl_exec($curl);//返回结果
echo$r;

curl_close($curl);//关闭
$curl2=curl_init();
curl_setopt($curl2,CURLOPT_URL,'http://bbs.miaozhan360.com/forum.php');//登陆后要从哪个页面获取信息
curl_setopt($curl2,CURLOPT_HEADER,false);
curl_setopt($curl2,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl2,CURLOPT_COOKIEFILE,$cookie_jar);
$content=curl_exec($curl2);
echo$content;
?>

㈧ 如何通过php程序模拟用户登录

模拟用户可以用php的curl的post,例如
$url = "http://www.uzuzuz.com";
$post_data = array ("username" => "uzuzuz","password" => "12345");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
//打印获得的数据
print_r($output);

具体参考:http://www.uzuzuz.com/article/4.html

㈨ php模拟windows域用户登录网站并获取数据

一般网站都是通过cookie来判断登录状态的,你可以第一次手动登录,然后把cookie保存下来。然后在用curl带上这个cookie去请求网站,就会认为你是登录的了,同时你要把新返回的cookie保存下来,这都是curl里面设置的事情,一个CURLOPT_COOKIEFILE 一个 CURLOPT_COOKIEJAR 可以说百分之九十的网站都可以这样处理

㈩ 如何用PHP模拟登录,并保存Session值。急急急。。。。。

这个是要连接数据库的。。。
生成页面:
开启session(每个php页面都写这句):session_start();
生成session:$_session['test']=100;//把100存入session,并命名test;

接受页面:
开启session:session_start();
接受session:$test=$_session['test'];
输出session:echo $test;
。。。。。。
后面不知道怎么写了

阅读全文

与php模拟登陆网页相关的资料

热点内容
自己购买云主服务器推荐 浏览:422
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:192
pdf劈开合并 浏览:28
不能修改的pdf 浏览:752
同城公众源码 浏览:489
一个服务器2个端口怎么映射 浏览:298
java字符串ascii码 浏览:79
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332
android关联表 浏览:946
安卓导航无声音怎么维修 浏览:333
app怎么装视频 浏览:431
安卓系统下的软件怎么移到桌面 浏览:96
windows拷贝到linux 浏览:772
mdr软件解压和别人不一样 浏览:904
单片机串行通信有什么好处 浏览:340
游戏开发程序员书籍 浏览:860
pdf中图片修改 浏览:288
汇编编译后 浏览:491