从请求报文的返回包里获取目标关键字的内容

#include <stdio.h>  
#include <stdlib.h>  
#include "curl.h"

static size_t write_data(void *ptr, size_t size, size_t nmemb, void *param)  
{  
    return size * nmemb;  
}  
  
static size_t head_data(char *ptr, size_t size, size_t nmemb, void *param)  
{  
	//printf("%s\r\n",ptr);
	char buff[512] = {0};
	char * pketword = "Content-Length: ";
	int i = 0;

	if(NULL == ptr)
	{
		printf("packet read error! \r\n");
		return size * nmemb; 
	}
    while((ptr[i] == pketword[i])&&(ptr[i] != ' '))       
    {       
        i++;   
    }  
    if(ptr[i] == pketword[i])  
	{
		//sscanf( (char*)ptr, "%*s%[^\r]", buff );//%s遇空格停止,加*则是忽略第一个读到的字符串
		sscanf((char*)ptr, "%*[^ ] %[^\r\n]", buff);//第一段到空格结束前的内容都忽略掉,第二段从空格开始换行结束
		printf("Size=%s\r\n",buff);
		return 0;
	}
	else
	{
		return size * nmemb;  
	}
}

void * http_get() 
{
    CURL *curl;//定义CURL类型的指针  
    CURLcode res; //定义CURLcode类型的变量  
  
    curl = curl_easy_init();//初始化一个CURL类型的指针   
  
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);//这里打开libcurl打印所有调试信息  
      
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);  
    //CURLOPT_NOBODY只下报文头,不包括数据.但是这里默认是head命令,注释掉,则是GET命令  
    curl_easy_setopt(curl, CURLOPT_NOBODY, 1);  
  
    curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);   
  
    curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, head_data);  
  
    //让用户指定url. Defaultport中存放的命令行传进来的网址  
    curl_easy_setopt(curl, CURLOPT_URL, "http://10.27.82.103/test.txt");  
      
    //传输时间 (ms)   
    curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 100);
  
    //设置端口
    curl_easy_setopt(curl, CURLOPT_PORT, 80);  
  
	res = curl_easy_perform(curl);

    //清除curl操作.  
    curl_easy_cleanup(curl);  
  
    return NULL;  
}

int main()
{
	CURLcode res;

	res = curl_global_init(CURL_GLOBAL_ALL);  
    if (res != CURLE_OK)  
    {  
        printf( "Failed to global init default [%d]\n", res );  
        return 1;  
    }

	http_get();
}


 

你可能感兴趣的:(null,url,include)