curl_init()

curl_init()
$ch=curl_init();
$c_url=’http://?’;
 $c_url_data=”product_id=”.$product_id.”&type=”.$type.””;
 curl_setopt($ch,CURLOPT_URL,$c_url);
 curl_setopt($ch,CURLOPT_POST,1);
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

大家好,又见面了,我是你们的朋友全栈君。

$ch = curl_init();

$c_url = ‘http://?’;
 $c_url_data = “product_id=”.$product_id.”&type=”.$type.””;

 curl_setopt($ch, CURLOPT_URL,$c_url);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $c_url_data);
 echo $result = curl_exec($ch);
 curl_close ($ch);
 unset($ch);

 

 

在PHP中使用Curl

Posted 09月 14th, 2008 归属于PHP

原文(英文)地址: http://www.phpit.net/article/using-curl-php  版权声明:署名-非商业性使用-禁止演绎 2.0

摘要:

在这篇文章中主要讲解php_curl库的知识,并教你如何更好的使用php_curl。

简介

你可能在你的编写PHP脚本代码中会遇到这样的问题:怎么样才能从其他站点获取内容呢?这里有几个解决方式;最简单的就是在php中使用fopen()函数,但是fopen函数没有足够的参数来使用,比如当你想构建一个“网络爬虫”,想定义爬虫的客户端描述(IE,firefox),通过不同的请求方式来获取内容,比如POST,GET;等等这些需求是不可能用fopen()函数实现的。

 

为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl,这个扩展库通常是默认在安装包中的,你可以它来获取其他站点的内容,也可以来干别的。

 

 

备注:这两段代码需要php_curl扩展库的支持,查看phpinfo(),如果curl support  enabled则表示支持curl库。

1、Windows下的PHP开启curl库支持:

打开php.ini,将extension=php_curl.dll前的;号去掉。

2、Linux下的PHP开启curl库支持:

编译PHP时在./configure后加上 –with-curl

 

在这篇文章中,我们一起来看看如何使用curl库,并看看它的其他用处,但是接下来,我们要从最基本的用法开始

基本用法:

第一步,我们通过函数curl_init()创建一个新的curl会话,代码如下:

 

<?php

// create a new curl resource

$ch = curl_init();

?>

 

我们已经成功创建了一个curl会话,如果需要获取一个URL的内容,那么接下的一步,传递一个URL给curl_setopt()函数,代码:

 

<?php

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);

?>

 

做完上一步工作,curl的准备工作做完了,curl将会获取URL站点的内容,并打印出来。代码:

 

<?php

// grab URL and pass it to the browser

curl_exec($ch);

?>

 

最后,关闭当前的curl会话

 

<?php

//close curl resource, and free up system resources

curl_close($ch);

?>

 

下面我们来看看完成的实例代码:

 

<?php

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”);

// grab URL and pass it to the browser

curl_exec($ch);

// close curl resource, and free up system resources

curl_close($ch);

?>

 

(查看在线demo)

我们刚刚把另外一个站点的内容,获取过来以后自动输出到浏览器,我们有没有其他的方式组织获取的信息,然后控制其输出的内容呢?完全没有问题,在curl_setopt()函数的参数中,如果希望获得内容但不输出,使用CURLOPT_RETURNTRANSFER参数,并设为非0值/true!,完整代码请看:

 

<?php

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// grab URL, and return output

$output = curl_exec($ch);

// close curl resource, and free up system resources

curl_close($ch);

// Replace ‘Google’ with ‘PHPit’

$output = str_replace(’Google’, ‘PHPit’, $output);

// Print output

echo $output;

?>

 

(查看在线demo)

在上面的2个实例中,你可能注意到通过设置函数curl_setopt()的不同参数,可以获得不同结果,这正是curl强大的原因,下面我们来看看这些参数的含义。

CURL的相关选项:

如果你看过php手册中的curl_setopt()函数,你可以注意到了,它下面长长的参数列表,我们不可能一一介绍,更多的内容请查看PHP手册,这里只介绍常用的和有的一些参数。

第一个很有意思的参数是 CURLOPT_FOLLOWLOCATION ,当你把这个参数设置为true时,curl会根据任何重定向命令更深层次的获取转向路径,举个例子:当你尝试获取一个PHP的页面,然后这个PHP的页面中有一段跳转代码 <?php header(”Location:http://new_url”);….?>,curl将从http://new_url获取内容,而不是返回跳转代码。完整的代码如下:

 

<?php

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// grab URL, and print

curl_exec($ch);

?>

 

(查看在线demo),

如果Google发送一个转向请求,上面的例子将根据跳转的网址继续获取内容,和这个参数有关的两个选项是CURLOPT_MAXREDIRS和CURLOPT_AUTOREFERER .

参数CURLOPT_MAXREDIRS选项允许你定义跳转请求的最大次数,超过了这个次数将不再获取其内容。如果CURLOPT_AUTOREFERER 设置为true时,curl会自动添加Referer header在每一个跳转链接,可能它不是很重要,但是在一定的案例中却非常的有用。

下一步介绍的参数是CURLOPT_POST,这是一个非常有用的功能,因为它可以让您这样做POST请求,而不是GET请求,这实际上意味着你可以提交

其他形式的页面,无须其实在表单中填入。下面的例子表明我的意思:

 

<?php

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL,”http://projects/phpit/content/using%20curl%20php/demos/handle_form.php”);

// Do a POST

$data = array(’name’ => ‘Dennis’, ’surname’ => ‘Pallett’);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// grab URL, and print

curl_exec($ch);

?>

 

(View Live Demo)

And the handle_form.php file:

 

<?php

echo ‘<h3>Form variables I received: </h3>’;

echo ‘<pre>’;

print_r ($_POST);

echo ‘</pre>’;

?>

 

正如你可以看到,这使得它真的很容易提交形式,这是一个伟大的方式来测试您的所有形式,而不以填补他们在所有的时间。

参数CURLOPT_CONNECTTIMEOUT 通常用来设置curl尝试请求链接的时间,这是一个非常重要的选项,如果你把这段时间设置的太短了,可能会导致curl请求失败。

但是如果你把它设置的时间太长了,可能PHP脚本将死掉。和这个参数相关的一个选项是 CURLOPT_TIMEOUT,这是用来设置curl允许执行的时间需求。如果您设置这一个很小的值,它可能会导下载的网页上是不完整的,因为他们需要一段时间才能下载。

最后一个选项是 CURLOPT_USERAGENT,它允许你自定义请求是的客户端名称,比如webspilder或是IE6.0.示例代码如下:

 

<?php

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.useragent.org/”);

curl_setopt($ch, CURLOPT_USERAGENT, ‘My custom web spider/0.1′);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// grab URL, and print

curl_exec($ch);

?>

 

(View Live Demo)

现在我们把最有意思的一个参数都介绍过了,下面我们来介绍一个curl_getinfo() 函数,看看它能为我们做些什么。

获取页面的信息:

函数curl_getinfo()可以使得我们获取接受页面各种信息,你能编辑这些信息通过设定选项的第二个参数,你也可以传递一个数组的形式。就像下面的例子:

 

<?php

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.com”);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_FILETIME, true);

// grab URL

$output = curl_exec($ch);

// Print info

echo ‘<pre>’;

print_r (curl_getinfo($ch));

echo ‘</pre>’;

?>

 

(View Live Demo)

大部分返回的信息是请求本身的,像:这个请求花的时间,返回的头文件信息,当然也有一些页面的信息,像页面内容的大小,最后修改的时间。

那些全是关于curl_getinfo()函数的,现在让我们看看它的实际用途。

实际用途:

curl库的第一用途可以查看一个URL页面是否存在,我们可以通过查看这个URL的请求返回的代码来判断比如404代表这个页面不存在,我们来看一些例子:

 

<?php

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.com/does/not/exist”);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// grab URL

$output = curl_exec($ch);

// Get response code

$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Not found?

if ($response_code == ‘404′) {

echo ‘Page doesn/’t exist’;

} else {

echo $output;

}

?>

 

(View Live Demo)

其他的用户可能是创建一个自动检查器,验证每个请求的页面是否存在。

我们可以用curl库来写和google类似的网页蜘蛛(web spider),或是其他的网页蜘蛛。这篇文章不是关于如何写一个网页蜘蛛的,因此所以我们没有讲任何关于网页蜘蛛的细节问题,但是以后在PHPit 将会介绍用 curl来构造一个web spider.

结论:

在这篇文章我已经表明,如何使用php中的curl库和其大部分的选项。

为最基本的任务,只想获得一个网页,你可能不会需要CURL库,但是,一旦你想要做任何事情稍微先进的,您可能会想要使用curl库。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158212.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 收藏几款好用的网页下载工具(网页下载器)「建议收藏」

    收藏几款好用的网页下载工具(网页下载器)「建议收藏」收藏几款好用的网页下载工具(网页下载器)引言webzipTeleportUltraTeleportUltra小飞兔下载MihovPictureDownloaderWinHTTrackHTTrack仿站小工具引言有的人利用网页下载工具下载网站到本地进行慢慢的欣赏,有的人利用下载工具创建垃圾站。不管你是出于什么样的目的,下面这些工具软件你可以会需要。webzip一款国外的网页下载器,把一个网站下载并压缩到一个单独的ZIP文件中,可以帮您将某个站台全部或部份之资料以ZIP格式压缩起来,可供你日后

  • Jenkins安装_jenkins sonar

    Jenkins安装_jenkins sonar前言jenkins的环境搭建方法有很多,本篇使用docker快速搭建一个jenkins环境。环境准备:mac/Linuxdockerdocker拉去jenkins镜像先下载jenkins镜

  • MATLAB 之 wavedec2函数详解

    MATLAB 之 wavedec2函数详解wavedec2函数:1.功能:实现图像(即二维信号)的多层分解,多层,即多尺度.2.格式:[c,s]=wavedec2(X,N,’wname’)    [c,s]=wavedec2(X,N,Lo_D,Hi_D)(我不讨论它)3.参数说明:对图像X用wname小波基函数实现N层分解,这里的小波基函数应该根据实际情况选择,具体选择办法可以搜之或者hel

  • ant安装过程

    ant安装过程ant是jakarta一个非常好的OpenSource子项目,是基于java的编译工具。下面简单介绍一下在linux环境中如何安装ant:1.下载  从 http://ant.apache.org/bindownload.cgi 可以下载最新的tar包:apache-ant-1.8.1-bin.tar.gz 2.安装,直接解压到当前下载目录即可>tarzxpvfapach

  • xshell的安装和使用_git详细教程

    xshell的安装和使用_git详细教程1、Xshell6的安装废话不多说直接上链接:链接:https://pan.baidu.com/s/1WCOxkdhLIZj7yLakWu4Tdw提取码:t3ak2、了解Xshell及其使用2.1、Xshell是什么东西?首先我们要知道Xshell是用来干什么的。Xshell其实就是一个远程终端工具,它可以将你的个人pc(个人电脑)和你在远端的机器连接起来,通过向Xshell输入命令然后他通过网络将命令传送给远端Linux机器然后远端的Linux机器将其运行结果通过网络传回个人电脑。.

  • 小明加密通道进入_门禁系统跟闸机通道的区分是什么?功能是一样吗

    小明加密通道进入_门禁系统跟闸机通道的区分是什么?功能是一样吗门禁系统属于一卡通系统的范畴。它是以中央处理器为核心,由控制器、信息采集器和电控锁组成的控制网络系统。通过系统的信息读取和处理,实现了各种门锁开关的自动控制。根据信息阅读的方式可以分为:插卡式、感应式、图像检测式、双眼虹膜识别式等。他们的技术含量和体系工程预算顺序先后提高。且融合三辊闸、摆闸、翼闸等多种入口处监管设施,保持更智能。门禁用到ID和IC两种卡片,IC门禁有加密功能,存贮容量也大,广泛用…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号