热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linuxlibcurl传参数,linux使用libcurl提交POST请求

http:blog.csdn.netzengraoliarticledetails115225632013最近在学习libcurl,并利用它提交POST请求ÿ

http://blog.csdn.net/zengraoli/article/details/11522563

2013

最近在学习libcurl,并利用它提交POST请求,可是返回的响应总是无从验证该次POST请求是否成功提交了。

1. 先看下根据firebug提交的一次成功的请求,这里以login我喜欢上的xiami为例,嘻嘻~

1.1 本次POST请求的HTTP交互

71192382_1.png

1.2 POST

71192382_2.png

1.3 经server端redirect的GET

71192382_3.png

2. OK,接下来看下使用libcurl向xiami发送POST请求

2.1 使用libcurl的大概流程

curl_easy_init()

curl_easy_setopt()

curl_easy_perform()

curl_easy_cleanup()

呵呵~超简单的吧,具体的意思这里就不详细说了,参见http://curl.haxx.se/libcurl/c/

2.2 再来看简单的代码

#include 

#include 

#include 

#include 

#define POSTURL "http://www.xiami.com/member/login"

#define POSTFIELDS "email=myemail@163.com&password=mypassword&autologin=1&submit=登 录&type="

#define FILENAME "curlposttest.log"

size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);

int main(int argc, char *argv[]) {

CURL *curl;

CURLcode res;

FILE *fptr;

struct curl_slist *http_header = NULL;

if ((fptr = fopen(FILENAME, "w")) == NULL) {

fprintf(stderr, "fopen file error: %s\n", FILENAME);

exit(1);

}

curl = curl_easy_init();

curl_easy_setopt(curl, CURLOPT_URL, POSTURL);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, POSTFIELDS);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, fptr);

curl_easy_setopt(curl, CURLOPT_POST, 1);

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);

curl_easy_setopt(curl, CURLOPT_HEADER, 1);

curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);

curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/Users/zhu/CProjects/curlposttest.COOKIE");

res = curl_easy_perform(curl);

curl_easy_cleanup(curl);

}

size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) {

FILE *fptr = (FILE*)userp;

fwrite(buffer, size, nmemb, fptr);

}

2.3 说下这当中的一些操作吧

CURLOPT_URL: URL地址

CURLOPT_POSTFIELDS: POST参数

CURLOPT_WRITEFUNCTION: 对返回的数据进行操作的函数地址

CURLOPT_WRITEDATA: 设置WRITEFUNCTION的第四个参数值

CURLOPT_POST: 设置为非0表示本次操作为POST

CURLOPT_VERBOSE: 设置为非0在执行时打印请求信息

CURLOPT_HEADER: 设置为非0将响应头信息同响应体一起传给WRITEFUNCTION

CURLOPT_FOLLOWLOCATION: 设置为非0,响应头信息Location

CURLOPT_COOKIEFILE: 哈哈,这个实在是太重要了,我之前尝试了好多次没法验证该次POST是否成功的原因就是没有设置这个罗。设置对应的COOKIEFILE路径,该路径文件并不一定需要在物理磁盘上实际存在

2.4 接下来是成功返回的结果哦,呵呵,下面截图当中的zhuzhu可以为证,不好意思,xiami上取了个比较CUO的名字~

71192382_4.png



推荐阅读
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文探讨了在SQL Server中处理几何类型列时遇到的INTERSECT操作限制,并提供了解决方案,包括通过转换数据类型和使用额外表结构的方法。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文介绍了一种使用SQL Server存储过程来实现基于单一条件的高效分页查询的方法。通过示例代码,详细说明了如何构建和执行这种分页查询。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 本文探讨了如何有效地构建和优化微信公众平台账号,涵盖了用户信息管理、内容创作与发布、互动策略及数据分析等方面。通过合理设置用户信息字段,如用户名、昵称、密码、真实姓名和性别等,确保账号的安全性和用户体验。同时,文章还介绍了如何利用微信公众平台的各项功能,提升用户参与度和品牌影响力。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
author-avatar
天秤蜗牛666
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有