C语言调用libcurl的一个简单例子

2023-05-16

首先我们创建一个php页面:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<form action="#" method="post">
<input name="pass" type="text"></input>
<input name="submit" type="submit" value="Login"></input>
</form>

<?php

echo "Refer : " . $_SERVER['HTTP_REFERER'] . "<br>";

if(isset($_POST['pass']))
{
    echo "Login successfully via Password <br> pass = " . $_POST['pass'] . "<br>";

    setcookie("pass", "password");
}
else if(isset($_COOKIE['pass']))
{
    echo "Login successfully via COOKIE <br> pass = " . $_COOKIE['pass'] . "<br>";
}
else
{
    echo "Please login <br>";
}
?>

这是一个简单的登录页面,可以通过输入密码登陆,也可以通过cookie登陆。

我们将通过这个页面示范C语言通过libcurl库进行设置http请求头、post、cookie的操作。

C代码:

#include "stdafx.h"
#include "curl\curl.h"

size_t function( void *ptr, size_t size, size_t nmemb, void *stream)
{
    printf("%s\n", (char*)ptr);
    return 0;
}

int _tmain(int argc, TCHAR *argv[])
{
    CURL *curl;
    int i = 100;
    struct curl_slist *cookies = NULL;
    struct curl_slist *cookie = NULL;
    struct curl_slist *headers = NULL;

    curl = curl_easy_init(); //初始化

    //http请求头
    headers = curl_slist_append(headers,"POST /VSCurlTest.php HTTP/1.1");
    headers = curl_slist_append(headers,"Host:127.0.0.1");
    headers = curl_slist_append(headers,"Connection: keep-alive");
    headers = curl_slist_append(headers,"User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2141.400 QQBrowser/9.5.10219.400");
    headers = curl_slist_append(headers,"Cache-Control: max-age=0");
    headers = curl_slist_append(headers,"Content-Type: application/x-www-form-urlencoded");
    headers = curl_slist_append(headers,"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    headers = curl_slist_append(headers,"Referer:http://www.baidu.com");
    headers = curl_slist_append(headers,"Accept-Encoding: gzip, deflate");
    headers = curl_slist_append(headers,"Accept-Language: zh-CN,zh;q=0.8");
//  headers = curl_slist_append(headers,"Cookie: olfsk=olfsk7257964002188215; hblid=nR2Zo2hcfSVtItpT3m39N804DHbNAfAp; pass=password");//也可以直接通过头部提交cookie
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

    curl_easy_setopt(curl, CURLOPT_COOKIEFILE,"");//CURLOPT_COOKIEFILE参数用于从文件读取cookie。这里用于初始化cookie引擎,这样后面的curl_easy_getinfo才能正确接收到cookie数据.
    curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie_open.txt");//保存从服务器返回的cookie到文件,也就是说我们自己设置的并不会保存
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
    curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1/VSCurlTest.php");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, function);
    curl_easy_setopt(curl, CURLOPT_POST, 1);//设置CURLOPT_POST之后必须带有POST数据
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "pass=23333&submit=%CC%E1%BD%BB");
    curl_easy_setopt(curl, CURLOPT_COOKIE, "olfsk=olfsk7257964002188215; hblid=nR2Zo2hcfSVtItpT3m39N804DHbNAfAp; pass=adadad");

    curl_easy_perform(curl);

    curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);//获取cookie,只获取服务器返回的cookie
    cookie = cookies;
    while(cookie)
    {
        printf("%s\n", cookie->data);
        cookie = cookie->next;
    }

    curl_slist_free_all(headers);
    curl_slist_free_all(cookies);
    curl_easy_cleanup(curl);
    getchar();
    return 0;
}

通过注释这个例子的某些curl_easy_setopt调用,观察输出信息,大概也能理解libcurl的使用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言调用libcurl的一个简单例子 的相关文章

随机推荐

  • 亚马逊爬虫-python

    找实习遇到的作业 xff1a 最终结果 xff1a 实现代码分两部分 xff1a 抓取书籍id 爬取详细数据 1 xff1a import requests import re from pyquery import PyQuery as
  • http请求转串口通信模块实现网页发送文字硬件语音播放(esp8266 串口语音模块 )

    首先你有这样的8266 这两种8266自身带2个按键和烧录芯片方便调试 xff0c 综合性价比较高 还有就是需要这样的串口语音播放模块 有了这些我们开始吧 xff01 1 先看一段视频效果演示 xff0c 再来介绍实现步骤 http请求转串
  • 多智能体系统编队算法仿真--python3实现

    初始条件 xff1a 智能体位置随机生成所有智能体位置全局可知目标多边形位置给定所有个体运行相同算法 xff0c 根据环境来决定自己动作 目标 xff1a 形成均匀多边形分布 xff0c 所谓的 均匀 效果如下图 xff1a 即是多边形上间
  • 大众点评美食评论爬虫

    大家都知道的 xff0c 大众点评用了css反爬 xff0c 脑壳疼 评论文字使用SVG替换 然后还需要登录才能查看全部评论 xff0c 也就是要带cookie了 xff0c 此外时不时跳验证码 xff0c 验证码还有几种 xff0c 这帮
  • Python大佬手把手教你利用wxPython模块编写界面程序

    wxPython是一个开发桌面端图形界面的跨平台函数库 xff0c 开发语言为Python xff0c 它是基于C 43 43 的函数库wxWidgets的封装 很多人学习python xff0c 不知道从何学起 很多人学习python x
  • 什么是栈,栈存储结构详情

    什么是栈 xff0c 栈存储结构详情 同顺序表和链表一样 xff0c 栈也是用来存储逻辑关系为一对一数据的线性存储结构 xff0c 如图所示 从图1我们看到 xff0c 栈存储结构与之前学的线性存储有所差异 xff0c 这源于栈对数存和取的
  • C++cmath数学常用库中的代码介绍

    今天小编来分享一波C 43 43 cmath数学常用库中的常用代码 首先 xff0c 这些所有的代码都来自cmath库 xff0c 所以必须先引用cmath头文件 xff0c 即 xff1a include lt cmath gt 1 绝对
  • vue-cli-service Axios 持续返还401

    后端 xff1a 在登录超时或没有登录的情况 xff0c 所有请求都会拒绝并且返还HTTP状态码401 前端 xff1a 前端将认证的Token放到loadStorage中 xff0c 在认证失效时候清空 在接到HTTP状态码为401时 x
  • 载波相位测量

    1 简述GPS载波相位测量的基本原理 载波相位测量的观测量是GPS接收机所接收的卫星载波信号与接收机本振参考信号的相位差 利用接收机测定载波相位观测值 xff0c 经基线向量解算以获得两个同步观测站之间的基线向量坐标差 2 在高精度GPS测
  • PJLib开发杂谈

    去年公司搞了一个智慧乡村的项目 xff0c 其中涉及到视频监控的问题 电信提供的解决方案 xff0c 我们的平台只需要跟电信对接HLS流就可以了 这就有一个问题 xff0c 原来公司安装的监控无法接入到自己的平台 xff0c 好尴尬啊 于是
  • 开发GB28181监控平台前期准备总结

    首先得准备PJLIB的编译 xff0c 这个搜一下 xff0c 下载以后它是有VS的工程文件的 xff0c 所以编译很方便 得到这个库以后 xff0c 就可以编写SIP服务程序了 xff0c 服务程序可以验证GB28181的相关通讯流程 x
  • esp8266 丢失固件 丢失程序问题

    1 首先esp8266 丢失固件 丢失程序问题已经解决 2 解决方法 我们制作了一个固件保护主板 xff0c 提供2种供电接口 xff0c 支持5v稳压 串口电平保护 xff0c 固件保护 xff0c 反电动势保护 xff0c 支持复位按键
  • printf重定向

    1 printf与fputc 对于 printf 函数相信大家都不陌生 xff0c 第一个C语言程序就是使用 printf 函数在屏幕上的控制台打印出Hello World xff0c 之后使用 printf 函数输出各种类型的数据 xff
  • ESP32_BLUFI代码移植过程遇到的问题

    1 先是运行esp32官方给的例程 xff0c 出现了错误报错如下 xff1a esp image Image length 1053648 doesn t fit in partition length 1048576 boot Fact
  • Java 中的 Iterator 迭代器详解

    x1f366 Iterator 接口 在程序开发中 xff0c 经常需要遍历集合中的所有元素 针对这种需求 xff0c JDK 专门提供了一个接口 java util Iterator Iterator 接口也是 Java 集合中的一员 x
  • 三.【NodeJs入门学习】POST接口

    上一节我们学习了get接口 xff0c 这一节我们自己来写一下post接口 1 复习一下 先复习一下上一节中get请求的步骤 上图是在入口app js中处理get请求 xff0c 先拿到请求的url xff0c 然后设置了一个函数handl
  • 多进程和多线程比较

    原文 xff1a http blog csdn net lishenglong666 article details 8557215 很详细 对比维度 多进程 多线程 总结 数据共享 同步 数据共享复杂 xff0c 需要用IPC xff1b
  • C++ 之头文件声明定义

    最近在学习 c 43 43 在编译与链接过程中遇到了一些定义与声明的问题 经过多处查阅资料 基本解惑 现记录与此 希望让后面人少走些弯路 C 43 43 的头文件应该用什么扩展名 目前业界的常用格式如下 implementation fil
  • arduino修改串口缓冲区大小的三种办法

    由于SoftwareSerial h默认只接收64字节串行缓冲区 xff0c Arduino会将之后接收到的数据丢弃 xff0c 不满足业务需求 以下三种方法是笔者参考网上各种资料总结出来 xff0c 对于WEMOS D1 R2 xff0c
  • C语言调用libcurl的一个简单例子

    首先我们创建一个php页面 xff1a lt meta http equiv 61 span class hljs string 34 Content Type 34 span content 61 span class hljs stri