Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269

Не работает POST передача файла. Непонятки с TCHAR

14.03.2014, 14:14. Показов 1069. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код программы, которой я пытаюсь загрузить текстовый файл(для примера) на сервер. Но почему-то это никак не работает. Пробовал словить неткатом пакет, вот что получилось:
listening on [any] 80 ...
connect to [127.0.0.1] from validation.sls.microsoft.com [127.0.0.1] 59157
POST /upload/upload.php HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------------7d82751e2
bc0858
User-Agent: MyAgent
Host: 127.0.0.1
Content-Length: 210
Cache-Control: no-cache
Cookie: s_pers=%20s_fid%3D6D463DCA024AF939-1C2604BDB2B68135%7C1457266833122%3B%2
0s_vs%3D1%7C1394110233124%3B%20s_nr%3D13 94108433125-Repeat%7C1425644433125%3B

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7 d 8 2 7 5 1 e 2 b c
8 5 8
C o n t e n t - D i s p o s i t i o n : f o r m - d a t a ; n a m e = " f i
l e " ; f i l e n a m e = " C : \ t

То есть отослалась половина массива TCHAR frmdata. Я попробовал изменить код таким образом:

C++
1
2
 
 BOOL sent= HttpSendRequest(hRequest, hdrs, wcslen(hdrs), frmdata, wcslen(frmdata)*sizeof(TCHAR));
В этом случае frmdata в неткате полностью отобразился, но на сервер файл не загружается все равно. И очень странно, что строка отображается с пробелами между символами. Насколько я понял TCHAR занимает два байта и проблема как-то с этим связана. Только я не совсем понимаю в чем именно она заключается и как ее решить. Буду рад любой помощи.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "stdafx.h"
#include <windows.h>
#include <wininet.h>
#include <tchar.h>
#include <iostream>
 
#pragma comment(lib,"wininet.lib")
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    static TCHAR frmdata[] = _T("-----------------------------7d82751e2bc0858\r\nContent-Disposition: form-data; name=\"file\"; filename=\"C:\\test.txt\"\r\nContent-Type: text/plain\r\n\r\nAAAAAAAAAAAAAAAAA\r\n-----------------------------7d82751e2bc0858--\r\n");
    static TCHAR hdrs[] = L"Content-Type: multipart/form-data; boundary=---------------------------7d82751e2bc0858"; 
 
    HINTERNET hSession = InternetOpen(L"MyAgent",INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
     if(hSession==NULL)
    {
     cout<<"Error: InternetOpen";  
     system("PAUSE");
    }
 
 
    HINTERNET hConnect = InternetConnect(hSession, L"127.0.0.1",INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
     if(hConnect==NULL)
    {
     cout<<"Error: InternetConnect";  
     system("PAUSE");
    }
 
    HINTERNET hRequest = HttpOpenRequest(hConnect, L"POST",L"/upload/upload.php", NULL, NULL, NULL, 0, 1);
    if(hRequest==NULL)
    {
     cout<<"Error: HttpOpenRequest";  
     system("PAUSE");
    }
 
    BOOL sent= HttpSendRequest(hRequest, hdrs, wcslen(hdrs), frmdata, wcslen(frmdata));
    if(!sent)
    {
        
     cout<<"Error: HttpSendRequest";
     system("PAUSE");
     }
 
    //close any valid internet-handles
    InternetCloseHandle(hSession);
    InternetCloseHandle(hConnect);
    InternetCloseHandle(hRequest);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2014, 14:14
Ответы с готовыми решениями:

Передача POST данных не работает в Делфи хе5
Здравствуйте! Подскажите пожалуйста, я для передачи POST через webbrowser пользуюсь следующей процедурой: procedure...

Передача файла на сервер методом POST
Потолок: .Net 4.0 Идея: передать файл методом POST на сервер скрипту. Что есть: public string ZAGPyZKA_FAiLA(string FAiL,...

Непонятки при выоде методом POST
Пытаюсь создать скрипт для закачки информации на сайт из 1С на компьютере. В протоколе, регламентирующем обмен, есть такой пункт: ...

3
53 / 39 / 3
Регистрация: 22.02.2014
Сообщений: 90
14.03.2014, 14:31
Посмотрите для примера - https://github.com/mattn/Gyazo... azoCmd.cxx
0
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
14.03.2014, 14:48  [ТС]
Да, спасибо, но у вас там другой способ, через стримы. Мне интересно почему у меня не получается, при том если frmdata[] объявить как char, то все работает и отсылается. А с TCHAR почему-то нет. Вот я пытаюсь понять почему, но никак не могу разобраться.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.03.2014, 17:29
Цитата Сообщение от young_snake Посмотреть сообщение
А с TCHAR почему-то нет.
А почему должен? Какого TCHAR пихать в заголовки ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2014, 17:29
Помогаю со студенческими работами здесь

Передача массива через POST и подгрузка файла через AJAX
Доброго времени суток. Задача такого : есть элемент select в котором можно выбрать несколько вариантов. Далее по нажатию на кнопку, должен...

Не работает передача файла по сети
Есть сервер: package serverpack; import java.net.*; import java.io.*; public class Server { ServerSocket ss; Socket socket; ...

POST передача
Проблема собственно в следующем: Есть набор чекбоксов которые вытаскиваются с базы циклом do/while. Чекбоксы - это список товаров....

post передача в php
Пытаюсь передать в PHP содержимое textarea-полей. Меродом POST, конечно const FLD = new Array ( 'AboutMe', 'MyInteres', 'MyAstroP' );...

Передача GET и POST параметр
Доброго времени суток. Помогите разобраться с передачей параметра &lt;script language=&quot;javascript&quot;&gt; $(function() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru