C/C++使用Curl

最近想用MFC做个课程表,考虑到课程一学期变一次,就不能把课程写死,可以使用现成的CURL库来模拟HTTP请求访问教务系统,采集课程信息。

首先在VS中简单的配置下CURL

1、下载CURL 打开http://curl.haxx.se/download.html 下载windows环境下的程序源码

2、打开目录下的vc6curl.sln工程,然后选择DLL Release编译

3、打开目录下的lib目录,进入DLL-Release中拷贝libcurl.dll和libcurl_imp.lib两个文件

4、打开VS新建一个空项目,创建一个main.cpp,写入测试代码

#include<stdio.h>
#include<iostream>
#include "./curl/curl.h"

#pragma comment(lib, "libcurl_imp.lib")


size_t write_data(void* buffer,size_t size,size_t nmemb,void *stream){
	
	printf("%s",buffer);
	return size*nmemb;
}


int main(){

	using namespace std;

	CURL *curl;  
	CURLcode res;  
	const char pURL[] = "http://www.baidu.com/";
	const char pParameter[] = "password=123";
	
	curl = curl_easy_init();  
    if(curl) {  
		
	
		curl_easy_setopt(curl, CURLOPT_URL, pURL);//url地址
		curl_easy_setopt(curl,CURLOPT_POST,1); //设置问非0表示本次操作为post
	    curl_easy_setopt(curl,CURLOPT_POSTFIELDS,pParameter); //post参数
		curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data); //对返回的数据进行操作的函数地址
		//curl_easy_setopt(curl,CURLOPT_WRITEDATA,fptr); //这是write_data的第四个参数值
		curl_easy_setopt(curl,CURLOPT_VERBOSE,1); //打印调试信息
		curl_easy_setopt(curl,CURLOPT_HEADER,1); //将响应头信息和相应体一起传给write_data
		curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,true); //表示follow服务器返回的重定向信息。
		curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1); //当进程处理完毕后强制关闭会话,不再缓存供重用
		curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);  //设置访问的超时
		curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"curlposttest.txt");//包含cookie信息的文件
		curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "curlposttest.txt"); //连接结束后保存cookie信息的文件
		curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0"); //HTTP头中User-Agent的值 
	

		res = curl_easy_perform(curl);
		curl_easy_cleanup(curl);  
    }  



	getchar();
	return 0;
}
运行,会把百度的HTML源代码采集到,CURL配置成功


C++ 中,使用 libcurl 库发送 HTTP 请求是一种常见的网络通信操作。libcurl 是一个功能强大的库,支持多种协议如 HTTP、HTTPS、FTP等。以下是一个简单的例子,展示如何使用 libcurl 发送 GET 或 POST 请求: ```cpp #include <curl/curl.h> size_t write_callback(char *data, size_t size, size_t nmemb, std::string* userp) { (*userp).append(data, size * nmemb); return size * nmemb; } void send_http_request(const char* url, const char* request_type, const char* data = nullptr) { CURL* curl = curl_easy_init(); if (curl) { std::string response; curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); // 设置回调函数接收响应 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); if (request_type == "POST") { curl_easy_setopt(curl, CURLOPT_POST, 1); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data); // 如果需要设置请求头,可以添加下面这行 // curl_easy_setopt(curl, CURLOPT_HTTPHEADER, ...); } CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { printf("Response: %s\n", response.c_str()); } curl_easy_cleanup(curl); } } ``` 在这个示例里,`send_http_request` 函数接受 URL、请求类型(GET or POST)、以及可选的数据。对于 POST 请求,还需要设置 `CURLOPT_POSTFIELDS` 来传递数据。 使用这个基础框架,你可以根据实际需求调整参数和请求内容。例如,如果你想发送 JSON 数据,可以先将其编码成字符串作为 POST 数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值