CURL

CURL

  curl是利用URL语法在命令行方式下工作的开源文件传输工具。

  1。获得页面

使用命令:curl 页面的地址 例如:curl www.baidu.com
   用这个命令获得了www.baidu.com指向的页面,同样,如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地。如果下载的是HTML文档,那么缺省的将不显示文件头部,即HTML文档的header。要全部显示,请加参数 -i,要只显示头部,用参数 -I。任何时候,可以使用 -v 命令看curl是怎样工作的,它向服务器发送的所有命令都会显示出来。为了 断点续传 ,可以使用-r参数来指定传输范围。
  2.获取表单
<form method="GET" action="junk.cgi">
<input type=text name="birthyear">
<input type=submit name=press value="OK">
</form>
  2.1 get方法的表单:
   curl “表单提交地址+传递的参数”。例: curl "www.hotmail. com/when/junk.cgi?birthyear=1905&press=OK"。
  2.2 post方法的表单:
  curl  -d  "参数"  表单提交地址     例:curl -d "birthyear=1905&press=OK" www.hotmail. com/when/junk.cgi
  2.3 上传文件:
  curl -F upload=@localfilename -F press=ok 地址
  2.4 使用PUT:
  curl  -T  uploadfile  地址
  2.5 相关认证:
  curl可以处理各种情况的认证页面,例如下载用户名/密码认证方式的页面(在IE中通常是出现一个输入用户名和密码的输入框):curl -u name:password www.secrets. com
  如果网络是通过http代理服务器出去的,而代理服务器需要用户名和密码,那么输入:
  curl -U proxyuser:proxypassword http://curl.haxx. se
  任何需要输入用户名和密码的时候,只在参数中指定用户名而空着密码,curl可以交互式的让用户输入密码。
  2.6 引用:
  curl  -e  http://curl.haxx.se  daniel.haxx.se
  2.7 指定用户端:
  有些网络资源首先需要判断用户使用的是什么浏览器,符合标准了才能够下载或者浏览。此时curl可以把自己“伪装”成任何其他浏览器:
  curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" URL  这个指令表示curl伪装成了IE5.0,用户平台是Windows 2000。(对方服务器是根据这个字串来判断客户端的类型的,所以即使使用AIX也无所谓)。
  curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" URL  此时curl变成了Netscape,运行在PIII平台的Linux上了。
  2.8 COOKIES:
  Cookie是服务器经常使用的一种记忆客户信息的方法。如果cookie被记录在了文件中,那么使用命令:
  curl -b stored_cookies_in_file www.cookiesite. com
  curl可以根据旧的cookie写出新cookie并发送到网站:
  curl -b cookies.txt -c newcookies.txt www.cookiesite. com
  2.9 加密HTTP:
  如果是通过OpenSSL加密的https协议传输的网页,curl可以直接访问:curl https://that.secure.server. com
  2.10 http认证:
  如果是采用证书认证的http地址,证书在本地,那么curl这样使用:curl -E mycert.pem https://that.secure.server. com
  2.11 这里推荐几个读物:
  RFC 2616 HTTP协议语法的定义。RFC 2396 URL语法的定义。RFC 2109 Cookie是怎样工作的。RFC 1867 HTTP如何POST,以及POST的格式。

  3. PHP cURL函数列表
  
curl_close() 关闭一个cURL会话。
curl_copy_handle() 复制一个cURL句柄和它的所有选项。
curl_errno() 返回最后一次的错误号。
curl_error() 返回一个保护当前会话最近一次错误的字符串。
curl_escape() 返回转义字符串,对给定的字符串进行URL编码。
curl_exec() 执行一个cURL会话。
curl_file_create() 创建一个CURLFile对象。
curl_getinfo() 获取一个cURL连接资源句柄的信息。
curl_init() 初始化一个cURL会话。
curl_multi_add_handle() 向curl批处理会话中添加单独的curl句柄。
curl_multi_close() 关闭一组cURL句柄。
curl_multi_exec() 运行当前cURL句柄的子连接
curl_multi_getcontent() 如果设置了CURLOPT_RETURNTRANSFER,
  则返回获取的输出的文本流。
curl_multi_info_read() 获取当前解析的cURL的相关传输信息。
curl_multi_init() 返回一个新cURL批处理句柄。
curl_multi_remove_handle() 移除curl批处理句柄资源中的某个句柄资源。
curl_multi_select() 等待所有cURL批处理中的活动连接。
curl_multi_setopt() 设置一个批处理cURL传输选项。
curl_multi_strerror() 返回描述错误码的字符串文本。
curl_pause() 暂停及恢复连接。
curl_reset() 重置libcurl的会话句柄的所有选项。
curl_setopt_array() 为cURL传输会话批量设置选项。
curl_setopt() 设置一个cURL传输选项。
curl_share_close() 关闭cURL共享句柄。
curl_share_init() 初始化cURL共享句柄。
curl_share_setopt() 设置一个共享句柄的cURL传输选项。
curl_strerror() 返回错误代码的字符串描述。
curl_unescape() 解码URL编码后的字符串。
curl_version() 获取cURL版本信息。


 
 二、 curl的简单使用
  1. 初始化
  2. 设置请求选项
  3. 执行一个cURL会话并且获取相关回复
  4. 释放cURL句柄,关闭会话
  
  //初始化一个cURL会话 
   $ch = curl_init();

  //设置请求选项,包括具体的url
   curl_setopt($ch, CURLOPT_URL, "http://www.360weboy.com");
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_HEADER, 0);



  //注:更多的选项设置参考:http://cn2.php.net/manual/zh/function.curl-setopt.php

  //执行一个curl会话并获取相关回复
  $response = curl_exec($ch);


  //获取curl请求的具体信息,结果为关联数组(打印出来,自行观看),请参考: http://cn2.php.net/manual/zh/function.curl-getinfo.php
  $curl_info = curl_getinfo($ch);


  //抛出异常
  if ($response === false) {
   echo 'cURL错误信息:'.curl_error($ch);
  }


  //释放curl句柄,关闭curl会话
  curl_close($ch);




  1. 使用curl发送post请求
  $url = 'www.baidu.com';
  $post_data = ............;

  //设置请求选项(如上)

  //设置Post请求类型
  curl_setopt($ch, CURLOPT_POST, 1);
  //添加数据到请求中
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);



  2. 文件上传
  
  $post_data = array('attachment' => "@1.jpg");

  3. 文件下载
  
  //保存到本地的文件路径
  $path = 'local/....';
     .
                    .    
  //将文件内容写入本地文件
  $path = 'local/path/to/test.zip';

  3.2 大型文件的下载
     $url  = 'http://www.360weboy.com/test.zip';
        $path = 'local/path/to/test.zip';

        // 打开本地文件
        $fp = fopen($path, 'w');

        // 告诉curl本地文件句柄
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_FILE, $fp);

        curl_exec($ch);

        curl_close($ch);
        fclose($fp);
   在上述代码中,我们先打开个本地文件,并将文件句柄设置到curl中,然后让curl一边读取远程数据,一边写入到本地文件中。因为我们不需要在程序中获取远程回复的内容了,所以只要执行请求就可以。

  4. http验证
  
     $url = "http://www.360weboy.com/users/";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        // 设置用户名以及密码
        curl_setopt($ch, CURLOPT_USERPWD, "username:password");

        // 设置重导向
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);

        $response = curl_exec($ch);
        curl_close($ch);

  5. 通过代理发送请求
  
     $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,'http://www.360weboy.com');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        // 设置代理ip地址
        curl_setopt($ch, CURLOPT_PROXY, '222.73.173.50:8080');

        // 要验证的话,这里设置用户名以及密码
        curl_setopt($ch, CURLOPT_PROXYUSERPWD,'username:password');

        $response = curl_exec($ch);
        curl_close ($ch);

  6. 发送json数据
  
     $url = 'http://www.360weboy.me/json.php';

        // 建立json字符串
        $data = array('site' => '360weboy', 'url' => 'http://www.360weboy.com','email'=>'360weboy@gmail.com');
        $json_string = json_encode($data);

        $ch=curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        // 通过post请求发送上述json字符串
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, array('data'=>$json_string));

        $response = curl_exec($ch);
        curl_close($ch);

        echo $response;




  

  
  




  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值