利用HTTP方式上传(代码)

原创 2004年12月29日 15:58:00
#include <afxdtctl.h>
#include <Windows.h>
#include <WinINet.h>
#include <stdio.h>
BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize,CString strLocalFile);
BOOL Upload(CString bstrLocalFile,CString bstrServerIP,CString strServerPort,CString bstrRemoteFile);
#define BUFFSIZE 500

void main( int argc, char **argv )
{

 if (argc < 5)
 {
  printf("Usage: Bigpost <LocalFile> <ServerIP><ServerPort><ReomteFile>/n");
  printf("<LocalFile> is the local file to POST/n");
  printf("<ServerIP> is the server's IP to POST to/n");
  printf("<ServerPort> is the server's Port to POST to/n");
  printf("<ReomteFile> is the virtual path to POST to/n");
  exit(0);
 }
 Upload(argv[1],argv[2],argv[3],argv[4]);
}
BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize,CString strLocalFile)
{
 DWORD dwRead;
 BYTE* buffer;
 printf("Local file:%s/n",strLocalFile);
 FILE* fLocal;
 if((fLocal=fopen(strLocalFile,"rb"))==NULL){
  printf("Can't open the file:%s,maybe it doesn't exist!/n",strLocalFile);
   return false;
 }
 fseek(fLocal,0L,SEEK_END);
 dwRead=ftell(fLocal);
 rewind(fLocal);
  buffer=(BYTE *)malloc(dwRead);
  if(!buffer){
   printf("not enough memory!/n");
   return false;
  }
  printf("length of file:%d/n",dwRead);
  dwRead=fread(buffer,1,dwRead,fLocal);
  dwPostSize=dwRead;

 INTERNET_BUFFERS BufferIn;
 DWORD dwBytesWritten;
 BOOL bRet;
 BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS ); // Must be set or error will occur
    BufferIn.Next = NULL; 
    BufferIn.lpcszHeader = NULL;
    BufferIn.dwHeadersLength = 0;
    BufferIn.dwHeadersTotal = 0;
    BufferIn.lpvBuffer = NULL;                
    BufferIn.dwBufferLength = 0;
    BufferIn.dwBufferTotal = dwPostSize; // This is the only member used other than dwStructSize
    BufferIn.dwOffsetLow = 0;
    BufferIn.dwOffsetHigh = 0;

    if(!HttpSendRequestEx( hRequest, &BufferIn, NULL, 0, 0))
    {
        printf( "Error on HttpSendRequestEx %d/n",GetLastError() );
        return FALSE;
    }
 bRet=TRUE;
  if(bRet=InternetWriteFile( hRequest, buffer, dwPostSize, &dwBytesWritten))
   printf( "/r%d bytes sent.", dwPostSize);
 if(!bRet)
 {
        printf( "/nError on InternetWriteFile %lu/n",GetLastError() );
        return FALSE;
    }

    if(!HttpEndRequest(hRequest, NULL, 0, 0))
    {
        printf( "Error on HttpEndRequest %lu /n", GetLastError());
        return FALSE;
    }
  fclose(fLocal);
 free(buffer);
 return TRUE;
}

BOOL Upload(CString strLocalFile,CString strServerIP,CString strServerPort,CString strRemoteFile){
 DWORD dwPostSize=0;
 int intServerPort=atoi(strServerPort);
 HINTERNET hSession = InternetOpen( "HttpSendRequestEx", INTERNET_OPEN_TYPE_PRECONFIG,
  NULL, NULL, 0);
 if(!hSession)
 {
  printf("Failed to open session/n");
  return FALSE;
 }
 HINTERNET hConnect = InternetConnect(hSession, strServerIP, intServerPort,
  NULL, NULL, INTERNET_SERVICE_HTTP,NULL, NULL);
 if (!hConnect){
  printf( "Failed to connect/n" );
  return FALSE;
 }else{
  HINTERNET hRequest = HttpOpenRequest(hConnect, "PUT", strRemoteFile, 
   NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
  if (!hRequest){
   printf( "Failed to open request handle/n" );
  }else{
   if(UseHttpSendReqEx(hRequest, dwPostSize,strLocalFile))
   { 
    char pcBuffer[BUFFSIZE];
    DWORD dwBytesRead;

    printf("/nThe following was returned by the server:/n");
    do
    { dwBytesRead=0;
     if(InternetReadFile(hRequest, pcBuffer, BUFFSIZE-1, &dwBytesRead))
     {
      pcBuffer[dwBytesRead]=0x00; // Null-terminate buffer
      printf("%s", pcBuffer);
     }
     else
      printf("/nInternetReadFile failed");
    }while(dwBytesRead>0);
    printf("/n");
   }
   if (!InternetCloseHandle(hRequest))
    printf( "Failed to close Request handle/n" );
  }
  if(!InternetCloseHandle(hConnect))
   printf("Failed to close Connect handle/n");
 }
 if( InternetCloseHandle( hSession ) == FALSE ){
  printf( "Failed to close Session handle/n" );
  return FALSE;
 }
 printf( "/nFinished./n" );
 return TRUE;
}

WEBSHELL姿势之不安全的HTTP方法(渗透实验)

前言 Web服务器(以IIS为例)在没有任何设置是,使用OPTIONS命令,可以返回所有能够响应的HTTP方法,如OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND,...
  • calmegm
  • calmegm
  • 2015年10月25日 09:47
  • 1544

Android开发中HTTP协议HttpPost向服务器发送JSon数据格式的数据

public void sendBjData(final String send) { new Thread() { @Override public void run() { ...
  • u012386435
  • u012386435
  • 2016年08月23日 10:11
  • 1510

http post方式上传文件

第一步        自己建立一个网站,并通过iis进行发布 第二步        上传下载代码完善 // /// 将本地文件上传到指定的服务器(HttpWebReques...
  • kwy15732621629
  • kwy15732621629
  • 2016年12月18日 18:55
  • 1731

使用Git上传本地代码到http://git.oschina.net/(SSH方式)

关于Git@OSC Git@OSC时开源中国社区团队基于开源项目GitLab开发的在线代码托管平台。每个Git@OSC账号可创建1000个项目,不限公有或私有,并已宣布代码托管服务永久免费。 使用...
  • u011127019
  • u011127019
  • 2016年04月28日 08:10
  • 3132

HTTP上传和下载C++封装类支持GET、POST多种方式

  • 2017年12月02日 16:30
  • 4KB
  • 下载

使用Socket 完成HTTP post方式的文本及文件上传 demo

  • 2016年10月24日 08:51
  • 5.71MB
  • 下载

JAVA模拟http上传文件_代码男_新浪博客

  • 2012年11月04日 21:39
  • 490KB
  • 下载

http文件上传代码

  • 2012年12月06日 11:56
  • 5KB
  • 下载

http跨平台访问接口的post,get,及文件上传方式工具类(httpClient)

需要先引入工具类httpclient-4.5.jar,httpcore-4.4.6.jar //---------------------------------------------------...
  • Dabria_ly
  • Dabria_ly
  • 2017年08月09日 15:53
  • 182

http以post方式上传一个文件,构造其请求头和消息报文

假设接受文件的网页程序位于 http://192.168.29.65/upload_file/UploadFile.假设我们要发送一个图片文件,文件名为“kn.jpg”,   首先客户端链接 192....
  • qq_16504067
  • qq_16504067
  • 2017年08月05日 09:29
  • 235
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用HTTP方式上传(代码)
举报原因:
原因补充:

(最多只允许输入30个字)