|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Отправка файла через ВинИнет
Добрый день, Дамы и Господа!
Пишу программу (правда, на C++), в которой периодически требуется отсылать на веб-сервер файлы методом POST. Думаю для этой цели использовать WinInet. Но мне, к сожалению, так и не удалось реализовать работающий код. То, что сейчас сделано, не годится - скрипт PHP, принимающий файлы на сервере, запускается, код ошибки 200 (это я посмотрел в логе Апачи), но файл на сервере не создается. В то же самое время, если отправлять файл с помощью веб-формы из браузера, то все благополучно, файл сохраняется с тем именем, которое передается в качестве параметра. Не могу понять, в чем ошибка. Буду признателен за работающий код, отправляющий файлы, или за ссылку на таковой. Можно на C++, можно на Delphi, да хоть и на бэйсике - перевести смогу. В качестве SDK подойдет, кроме WinInet, и винсок, хотя, конечно, WinInet желательнее. Большое спасибо за внимание! |
#2
|
||||
|
||||
А ну ка поделись тем, что у тебя сейчас в коде. И файл php желательно, или форму отправки.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
Вот приложение (код не мой, прошу не пинать):
Код:
#pragma comment(lib, "wininet.lib" ) #include <windows.h> #include <wininet.h> #include <iostream> #define ERROR_OPEN_FILE 10 #define ERROR_MEMORY 11 #define ERROR_SIZE 12 #define ERROR_INTERNET_OPEN 13 #define ERROR_INTERNET_CONN 14 #define ERROR_INTERNET_REQ 15 #define ERROR_INTERNET_SEND 16 using namespace std; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // Local variables static char *filename = "C:\\autoexec.bat"; //Filename to be loaded static char *type = "text/plain"; static char boundary[] = "pippo"; //Header boundary static char nameForm[] = "uploadedfile"; //Input form name static char iaddr[] = "localhost"; //IP address static char url[] = "upload.php"; //URL char hdrs[255]; //Headers char * buffer; //Buffer containing file + headers char * content; //Buffer containing file FILE * pFile; //File pointer long lSize; //File size size_t result; // Open file pFile = fopen ( filename , "rb" ); if (pFile==NULL) return ERROR_OPEN_FILE; // obtain file size: fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile); rewind (pFile); // allocate memory to contain the whole file: content = (char*) malloc (sizeof(char)*lSize + 1); if (content == NULL) return ERROR_MEMORY; content[lSize] = '\0'; // copy the file into the buffer: result = fread (content,1,lSize,pFile); if (result != lSize) return ERROR_SIZE; // terminate fclose (pFile); //allocate memory to contain the whole file + HEADER buffer = (char*) malloc (sizeof(char)*lSize + 2048); //print header sprintf(hdrs,"Content-Type: multipart/form-data; boundary=%s",boundary); sprintf(buffer,"--%s\r\nContent-Disposition: form-data; name=\"%s\"; data=\"%s\"\r\n",boundary,"autoexec.bat","autoexec.bat"); sprintf(buffer,"%sContent-Type: %s\r\n\r\n",buffer,type); sprintf(buffer,"%s%s\r\n",buffer,content); sprintf(buffer,"%s--%s--\r\n",buffer,boundary); //Open internet connection HINTERNET hSession = InternetOpen("WinSock",INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if(hSession==NULL) return ERROR_INTERNET_OPEN; HINTERNET hConnect = InternetConnect(hSession, iaddr,INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1); if(hConnect==NULL) return ERROR_INTERNET_CONN; HINTERNET hRequest = HttpOpenRequest(hConnect, (const char*)"POST",url, NULL, NULL, (const char**)"*/*\0", 0, 1); if(hRequest==NULL) return ERROR_INTERNET_REQ; BOOL sent= HttpSendRequest(hRequest, hdrs, strlen(hdrs), buffer, strlen(buffer)); if(!sent) return ERROR_INTERNET_SEND; char buf[1000]; DWORD nRead; InternetReadFile(hRequest, buf, 1000, &nRead); buf[nRead] = '\0'; //close any valid internet-handles InternetCloseHandle(hSession); InternetCloseHandle(hConnect); InternetCloseHandle(hRequest); return 0; } Код:
<?php $path='./logs/'; $return=''; if(move_uploaded_file($_FILES['data']['tmp_name'], $path.$_FILES['data']['name'])){ $return= "md5sum: ".md5_file($path.$_FILES['data']['name']); } else{$return='FALSE';} echo $return; ?> Код:
<form action="http://127.0.0.1/upload.php" method="post" enctype="multipart/form-data" > <input type="file" name="data" /><br /> <input type="submit" value="send" /> <input type="hidden" name="submiited" value="1" /> </form> |