http-如何用C语言实现post一个地址,并记录post数据

问题描述

如何用C语言实现post一个地址,并记录post数据

http://xxxx.xxx

idcode
actcode

data

./log idcode actcode data
post http://xxxx.xxxx
if(result=ok){
read logs from '/Skoo/Box/log/log.txt' one by one
post it
if(result=ok){
delete it
}
}
else{
white it to 'log.txt'
}

上面是伪代码,我想知道如何实现post,最好有代码。
C语言和shell吧尽量,谢谢

解决方案

C可以用curl

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>

#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 *stream)
{
    FILE *fptr = (FILE*)stream;
    fwrite(buffer,size,nmemb,fptr);
    return size*nmemb;
}

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
",FILENAME);
        return -1;
    }

    curl = curl_easy_init();
    if (!curl)
    {
        fprintf(stderr,"curl init failed
");
        return -1;
    }

    curl_easy_setopt(curl,CURLOPT_URL,POSTURL); //url地址
    curl_easy_setopt(curl,CURLOPT_POSTFIELDS,POSTFIELDS); //post参数
    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data); //对返回的数据进行操作的函数地址
    curl_easy_setopt(curl,CURLOPT_WRITEDATA,fptr); //这是write_data的第四个参数值
    curl_easy_setopt(curl,CURLOPT_POST,1); //设置问非0表示本次操作为post
    curl_easy_setopt(curl,CURLOPT_VERBOSE,1); //打印调试信息
    curl_easy_setopt(curl,CURLOPT_HEADER,1); //将响应头信息和相应体一起传给write_data
    curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1); //设置为非0,响应头信息location
    curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"/Users/zhu/CProjects/curlposttest.cookie");

    res = curl_easy_perform(curl);

    if (res != CURLE_OK)
    {
        switch(res)
        {
            case CURLE_UNSUPPORTED_PROTOCOL:
                fprintf(stderr,"不支持的协议,由URL的头部指定
");
            case CURLE_COULDNT_CONNECT:
                fprintf(stderr,"不能连接到remote主机或者代理
");
            case CURLE_HTTP_RETURNED_ERROR:
                fprintf(stderr,"http返回错误
");
            case CURLE_READ_ERROR:
                fprintf(stderr,"读本地文件错误
");
            default:
                fprintf(stderr,"返回值:%d
",res);
        }
        return -1;
    }

    curl_easy_cleanup(curl);
}

解决方案二:

C语言实现POST的一个例子

解决方案三:

使用平台提供的网络API,比如Windows有wininet
或者用socket,Windows下有winsock2,Linux下面也有socket

解决方案四:

可以库 libcurl,支持Windows,Unix,Linux等,线程安全,易于使用。
最新版本http://curl.haxx.se/download/curl-7.43.0.tar.gz。
代码参考@oyljerry

时间: 2024-10-28 02:59:19

http-如何用C语言实现post一个地址,并记录post数据的相关文章

中文字符-如何用C语言编写一个简单的输入法程序,要求可以输入汉字。

问题描述 如何用C语言编写一个简单的输入法程序,要求可以输入汉字. 不太清楚汉字在计算机中是如何存储的,想知道例如微软的智能ABC以及搜狗输入法是怎样实现拼音拼写下的汉字输入. 解决方案 首先要有一个汉字的编码库,比如GB2312编写的是拼音输入法的话,还要建立一个拼音与汉字对应的数据库然后根据用户输入的拼音,提示出对应的汉字(汉字的优先顺序由数据库决定,同时还可以学习该用户的使用习惯)如果输入法还支持智能联想输入的话,还要加入词库(也有优先级),这样可以根据前一个字来推断出下一个可能的字 解决

编程-如何用C语言的一维数组对一个元素的增删改

问题描述 如何用C语言的一维数组对一个元素的增删改 今天老师讲了C语言的一维数组,就是大批量处理数据的一个工具,他说自己回去 思考增删改查,唯独删除我理解不到,哪位大神可否指点迷津!多谢多谢啦 解决方案 比如,你确认你的数组中存放的都是整数,你可以将这个元素置为-1表示删除.增加就是先检查你的数组中有没有-1的元素,如果有,就设置为你的值.如果全部都满了,就开一个更大的数组,把数据拷贝过去. 解决方案二: 数组是数据结构中的顺序存储结构,删除就是将其下标所在位置的中的内容置为空(也就是0),然后

图像处理-如何用C语言将一个二值图(只有黑白)转换成一个01数字矩阵?

问题描述 如何用C语言将一个二值图(只有黑白)转换成一个01数字矩阵? 最近做课程设计,关于图像处理的问题,将一个二值图(只有黑白)转换成一个01数字矩阵. 解决方案 http://www.w2bc.com/Article/49290

c语言-请问如何用C语言判断一个整型的数是否为回文数

问题描述 请问如何用C语言判断一个整型的数是否为回文数 请教各位大神,如何用C语言判断一个整型的数是否为回文数? 解决方案 http://blog.163.com/ah..zhangrui/blog/static/539258022009105111759703/ 解决方案二: 把数字截取成数,按下标比较就可以了 解决方案三: 左右判断 是否对称 http://blog.csdn.net/u012605629/article/details/44648377 解决方案四: 楼主,程序直接给你,够

c语言-如何用C语言创建一个按钮,按下这个按钮后,相当于从键盘录入相应的字符串

问题描述 如何用C语言创建一个按钮,按下这个按钮后,相当于从键盘录入相应的字符串 问题的来源是这样的,我用c编了一个计算器的程序,但是其输入只能在黑框里通过键盘输,我想把它做成一个能用鼠标点的按键式的,所以,我想的是设置几个键,通过鼠标点了之后,就相当于从键盘录入了相应的字符串,也就能通过我编的C程序计算出结果,并显示出来了.如果可行的话,求大神帮我编一个简单的示例程序(比如就一个键,按下后相当于从键盘录入某个字符后字符串),如果不可行的话,能不能给我一个可行的建议啊 解决方案 控制台程序吗?要

如何编实心三角形-如何用C语言编一个实心三角形啊

问题描述 如何用C语言编一个实心三角形啊 等边的三角形 不是用*号组成那种 实心的.就跟绘图软件画的那种一样.非常感谢

c语言-如何用C语言写一个暴力破解SSH的程序

问题描述 如何用C语言写一个暴力破解SSH的程序 也就是用同文件夹里的一个字典,可以用fopen和fgets把密码一条一条打开,可是我不知道怎么在C语言里对一个其他地址进行SSH 求大神解答 解决方案 C语言没有 SSH 的功能,所以需要你去自己搞 SSH 算法. 解决方案二: 参考openssh,这个是开源的,可以用它来调用,连接http://www.openssh.com/

c语言 数组-请教如何用c语言去除一个数组中所有值为零的元素,而且这些零元素中有连续排列的?

问题描述 请教如何用c语言去除一个数组中所有值为零的元素,而且这些零元素中有连续排列的? 能否给一个示例程序?感激不尽! 比如以下这个数组中有连续的0元素,如何去除所有的零元素? double a[64]={4.63866e+020,1.456e+027,-7.67487e+017,9.86481e+016,0,0,-3.1101e+014,-9.38282e+010, 1.456e+027,4.60249e+033,-2.3969e+024,3.36857e+023,0,0,-9.64264e

如何用C语言画一个“圣诞树”_C 语言

如何用C语言画一个"圣诞树",我使用了左右镜像的Sierpinski triangle,每层减去上方一小块,再用符号点缀.可生成不同层数的「圣诞树」,如下图是5层的结果 #include <stdlib.h> int main(int argc, char* argv[]) { int n = argc > 1 ? atoi(argv[1]) : 4; for (int j = 1; j <= n; j++) { int s = 1 << j, k