[linux]curl库笔记

来源:互联网 发布:计算机中什么是算法 编辑:程序博客网 时间:2024/05/16 12:18

关于curl库的一个很好的文章,"对CURL的一些研究.html". 利用libcurl库,我
们可以非常轻松的连接到某个web站点,获得某个首页的htmldaima或者http请求的头部,还可
以提交表单,支持http,ftp等等.
我们一般使用curl_easy_init来得到curl的指针CURL*,然后通过多次调用curl_easy_setopt
向curl库指定我们需要的操作,然后用curl_easy_perform告诉curl开始动作. 最后用
curl_easy_cleanup清除. 范例如下,连接到一个网站,然后取得其html并保存.
  c.sh:
 #!/bin/sh
 gcc -g -Wall -o getPage -lcurl main.c
  main.c:
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>

 #include <curl/curl.h>
 #include <curl/types.h>
 #include <curl/easy.h>

 FILE* fp;

 // callback function for CURLOPT_WRITEFUNCTION
 // 写数据的回调函数,由curl来调用,这里把读到的html网页写入到文件中去
 size_t write_data(void* ptr,size_t size,size_t nmemb,void* stream)
 {
  int written = fwrite(ptr,size,nmemb,(FILE*)fp);
  return written;
 }

 int main(int argc,char** argv)
 {
  CURL* curl;
  CURLcode res;

  if(argc != 2)
  {
   printf("Usage: file <url>;/n");
   exit(-1);
  }

  // initial all OPTION
  // 这里指定所有可能的选项,其他可以选择的选项包括
  // CURL_GLOBAL_ALL    //初始化所有的可能的调用.
  // CURL_GLOBAL_SSL    //初始化支持 安全套接字层.
  // CURL_GLOBAL_WIN32  //初始化win32套接字库.
  // CURL_GLOBAL_NOTHING     //没有额外的初始化.
  curl_global_init(CURL_GLOBAL_ALL);
  
  // 这里initial并得到curl指针,注意这个得到的指针一般只用于easy类型的函数
  curl = curl_easy_init();    // initial a curl pointer
  if( curl != NULL )
  {
   // set the curl option
   // 这里调用setopt设定我们需要的操作
   curl_easy_setopt(curl,CURLOPT_URL,argv[1]);
   
   // open file for written
   if((fp=fopen(argv[1],"w"))==NULL)
   {
    curl_easy_cleanup(curl);
    exit(-1);
   }

   // set callback WRITEFUNCTION
   curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data);
   // if you want to set the 4th arg of WRITEFUNCTION
   // use this OPT:
   // 如果我们需要用到第四个变量,可以用这个函数设置
   // ptr为一个全局的或者static的指针
   // curl_easy_setopt(curl,CURLOPT_WRITEDATA,ptr);
   
   // for verbose info in secreen
   // 告诉curl在屏幕上打印信息,verbose
   curl_easy_setopt(curl,CURLOPT_VERBOSE,1);
   
   // play it
   // 这里调用perform告诉系统 go go go
   res = curl_easy_perform(curl);
   // 结束一个会话,和initial相对
   curl_easy_cleanup(curl);
  }
  return 0;
 }
在这里我们搞懂了3个单字的概念:
  1.render,表现,将数据用某种形式表现出来,如svg中,用render命名的类就是将svg数据画
    到painter上面,至于怎么画,render处理了. 所以才叫做render;
  2.perform,舞台,如果这里字面描述的一样,perform就像一个舞台,让我们的设置运作起
    来.在curl中,我们setopt之后就用perform让所有的set起作用;
  3.verbose,详细,其实这里由确认的意思,告知用户详细的信息让用户确认之. 在curl中这
    里是把详细的连接信息打印到屏幕上让用户知道;
对于CGI攻击而样curl是一个非常有用的工具,他的一些命令参数如下:
  -d POST方式发送数据;
  -b Cookie变量,可以是字符串或者文件;
  -c 把所有cookie写到文件中去;
  -e 伪装referer变量(来源)
  -A 伪装客户端
  -I 获得http服务器的头信息,可以大概判断web服务器的信息.
  我们可以用如下命令取得http的头信息:
  # curl -v -i -D header.txt http://eip.worldplus.com.cn

原创粉丝点击