关于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