php中curl模拟登录并获取数据的教程

 更新时间:2016年12月31日 09:44  点击:1707
这篇文章详细介绍了php中curl获取的过程,给出了简单易懂的代码,有兴趣的同学快来看看吧

PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。

代码实战

先来看登录部分的代码:

//模拟登录
functionlogin_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()可以将数组转换成相连接的字符串。

接下来如果登录成功后,我们要获取登录成功后的页面信息。

//登录成功后获取数据
functionget_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变量,变量是PHP中一个最基本的东西,下面一聚教程网将帮助大家初步了解PHP变量的相关知识。

一、PHP变量是什么

变量是存储信息的容器;

二、语法格式

$变量名称 = 1;

三、PHP 变量规则

1、变量以 $ 符号开头,其后是变量的名称;

2、变量名称必须以字母或下划线开头;

3、变量名称不能以数字开头;

4、变量名称只能包含字母、数字、字符和下划线(A-z、0-9 以及 _)

5、变量名称对大小写敏感($y 与 $Y 是两个不同的变量)

6、Notice

比如你在php中输入以下代码:

<?php

$a=$b=$c=WODE;

$d=$b+$c;

echo $d;

在浏览器中输入“localhost”就会弹出如下图所示的一个错误。

该错误解决办法:

第一步:打开phpstudy中的配置文件

第二步:在文档中用快捷键(Ctrl+F)搜索error_reporting,把它后面的E_ALL | E_STRICT改为E_ALL&`E_NOTICE即可。

第三步:重启phpstudy,刷新浏览器之后这个错误提示就不会显示了。

7、变量可以一起声明,一起表示,如下;

$a=$b=$c=2;

echo $a,$b,$c;

四、PHP 变量举例说明

<?php 

$x=5;

$y=6; 

$z=$x+$y; 

echo $z; 

?>

在上述例子中,$x=3;  $y=4;   $z=$x+$y; 都使用的是变量的语法,上述的变量类似代数,如下。

x=5 y=6 z=x+y

在代数中我们使用字母(比如 x)来保存值(比如 5)。

从上面的表达式 z=x+y,我们能够计算出 z 的值是 11。

在 PHP 中,这三个字母(x,y,z)被称为变量。

五、PHP变量的作用域

PHP 有四种不同的变量作用域:

  • local

  • global

  • static

  • parameter

Local 和 Global作用域

函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。

函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。

下面的例子测试了带有局部和全局作用域的变量:

<?php 

$x=5;   // 全局变量

function myTest()

{

$y=10;// 局部变量

echo"<p>测试变量在函数内部:<p>";

echo"变量 x 为: $x";

echo"<br>";

echo"变量 y 为: $y";

}

myTest();

echo"<p>测试变量在函数外部:<p>";

echo"变量 x 为: $x";

echo"<br>";

echo"变量 y 为: $y";

?>

在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:

<?php 

$x=5;

$y=10;

function myTest()

{

global $x,$y;

$y=$x+$y;

}

myTest();

echo $y;// 输出 15

?>

PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 

index 保存变量的名称。

这个数组可以在函数内部访问,也可以直接用来更新全局变量。

<?php 

$x=5;

$y=10;

function myTest()

{

$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];

}

myTest();

echo $y;

?>

Static 作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除,可以使用 static关键字

<?php

function myTest()

{

static $x=0;

echo $x;

$x++;

}

myTest();

myTest();

myTest();

?>

参数作用域

参数是通过调用代码将值传递给函数的局部变量。

参数是在参数列表中声明的,作为函数声明的一部分:

<?php

function myTest($x)

{

echo $x;

}

myTest(5);

?>

以上便是PHP变量的全部内容,希望对大家的学习有所帮助。

在上一期PHP的语法结构教程中,我们说到了在浏览器中输入“localhost”就会出现我们编码的那段话,那么本次web服务器的工作原理就来告诉大家原因。

localhost的意思:

在计算机网络中,localhost(意为“本地主机”,指“这台计算机”)是给回路网络接口(loopback)的一个标准主机名,相对应的IP地址为127.0.0.1,还不理解的同学请自行百度,在百科里面有详细的介绍。

web服务器的工作原理:

Web可以简单的理解成网络。

基本概念之:协议

两个电脑要传输数据,必须知道对方发来的东西是什么意思。所以他们约定了一些传输的格式,这些约定叫做协议(Protocol)。

基本概念之:HTTP

HTTP:Hypertext Transfer Protocol

中文:超文本传输协议

这个协议,简单理解,就是我们平时上网浏览网页和下载文件时电脑之间传输数据的协议。

基本概念之:服务器与客户端

客户端输入或点击一个网址,就发送一个HTTP的请求给服务器,服务器把网页传送回客户端。

现在比较主流的web服务器主要以“apache”为主。

基本概念之:网页

服务器发送给客户端的就是网页;

我们看到的网页其实是通过HTML语言写出来的。

以上便是web服务器的工作原理的全部内容,希望对大家有所帮助。

本次为大家带来的是一聚教程网-PHP入门教程03,这次的主要内容为PHP的语法结构,帮助大家了解在PHP中的一些基本语法结构是什么。

一、PHP语法结构

PHP的语法结构分为四种风格:标准风格、短风格、ASP风格、长风格。

1、标准风格

这是用的最多的一种风格;

书写格式为:

<?php

代码段; 

?>

注意:PHP每句以分号结尾!

实例:

<?php

echo 'hello world'

?>

生成方法:在这里以标准风格为例进行说明一下,在写好代码之后,查看效果的方法,后面的几种风格也适用。

第一步:打开phpstudy文件夹→打开WWW文件夹→新建一个文件夹,命名为Demo!

第二步:运行Zend studio,在左边空白处右击,选择“new”→“Project”;

第三步:点击Local PHP Project,新建一个文件

第四步:在所弹出来的框中,输入和小编一样的东西,文件名字命名为“Day1”,保存目录为之前设置好的“Demo”,最后点击finish;

第五步:输入上面为大家写好的实例代码,Ctrl+S保存文件;

第六步:打开浏览器,在浏览器中输入“localhost”,如果显示的和下图不一样,则看第七步,如果一样则点击“Demo”→“Day1”查看代码生成效果。

第七步:在phpStudy中,点击其他选项菜单→phpStudy设置→允许目录列表,最后回到浏览器刷新一下就会变得和第六步中的一样了。

2、短风格

书写格式:

<?

代码段;

?>

注意:需要PHP配置文件中short_open_tag = On,重启服务器生效;

详细步骤:

第一步:打开phpstudy,点击“其他选项菜单”→“打开配置文件”→“php-ini”,如下图所示;

第二步:按快捷键“Ctrl+F”,输入:short_open_tag,点击向下搜索,找到下图所在的位置,把“off”改为“on”,如果本来就是on,则不用动它。

第三步:点击phpstudy上的重启即可。

实例:

<?

echo '欢迎来到一聚教程网'

?>

3、ASP风格

书写格式为:

<%

代码段;

%>

注意:需要PHP配置文件中asp_tags = on,重启服务器生效,这个大家参考短风格即可;

实例:

<%

acho '欢迎来到一聚教程网'

%>

4、长风格

书写格式:



实例:



二、PHP注释

php注释分为单行注释和多行注释;

写注释的原因:为了在和同事或者小伙伴协同开发时,别人或者自己能清楚的知道这段代码的作用。

1、单行注释

使用“//”进行注释,如下所示;

<?php

//这个是我们的单行注释

echo '欢迎来到一聚教程网'

?>

2、多行注释

使用/**/进行注释,如下所示:

<?php

/*

 * 这个是我们的多行注释 

 * */

echo '欢迎来到一聚教程网'

?>

三、PHP文件命名注意事项

1、以字母或者下划线开始,后面可以跟数字、字母、下划线;

2、名称要有意义,一看见文件名字就知道里面的内容;

3、不要包含特殊字符;

4、不要有中文;

以上便是本次为大家带来的PHP的语法结构的全部内容,希望大家在看完之后都能有所收获。

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • php中用curl模拟登录discuz以及模拟发帖

    本文章完美的利用了php的curl功能实现模拟登录discuz以及模拟发帖,本教程供参考学习哦。 代码如下 复制代码 <?php $discuz_url = &lsquo;ht...2016-11-25
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • jquery获取tagName再进行判断

    如果是为了取到tagName后再进行判断,那直接用下面的代码会更方便: $(element).is('input') 如果是要取到标签用作到别的地方,可以使用一下代码: $(element)[0].tagName 或: $(element).get(0).tagName...2014-05-31
  • DOM XPATH获取img src值的query

    复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
  • php获取汉字拼音首字母的方法

    现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序。这是中国人大多数使用的排序方法。那么在php程序中该如何操作呢?下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的...2015-10-23
  • 使用C#获取系统特殊文件夹路径的解决方法

    本篇文章是对使用C#获取系统特殊文件夹路径的解决方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • node.js从数据库获取数据

    这篇文章主要为大家详细介绍了node.js从数据库获取数据的具体代码,nodejs可以获取具体某张数据表信息,感兴趣的朋友可以参考一下...2016-05-09
  • php如何获取文件的扩展名

    网上也有很多类似的方法,不过都存在这样那样的不严谨的问题,本文就不一一分析了,这里只给出最正确的利用php 获取文件扩展名(文件后缀名)的方法。 function get_extension($filename){ return pathinfo($filename,PATHIN...2015-10-30
  • 基于JavaScript获取鼠标位置的各种方法

    这篇文章主要介绍了基于JavaScript获取鼠标位置的各种方法 ,需要的朋友可以参考下...2015-12-18
  • C#获取变更过的DataTable记录的实现方法

    这篇文章主要介绍了C#获取变更过的DataTable记录的实现方法,对初学者很有学习借鉴价值,需要的朋友可以参考下...2020-06-25
  • 如何获取百度搜索结果页中解密之后的真实链接

    大家用百度搜索的时候,可能会发现,结果链接用的还是百度的链接,点击之后才会跳转到另外一个页面,另外一个页面的真实链接如何获取到呢?? 通过分析发现: 可以看出,返回...2016-05-19
  • C#设置与获取环境变量的方法详解

    这篇文章主要给大家介绍了关于C#设置与获取环境变量的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。...2020-06-25