Я хотел бы передать текстовый файл на веб-сервер с помощью wininet, как если бы файл передавался с помощью веб-формы, которая отправляет файл на сервер.
На основании полученных ответов я попробовал следующий код:
static TCHAR hdrs[] = "Content-Type: multipart/form-data\nContent-Length: 25";
static TCHAR frmdata[] = "file=filename.txt\ncontent";
HINTERNET hSession = InternetOpen("MyAgent",
INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET hConnect = InternetConnect(hSession, "example.com",
INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", "test.php", NULL, NULL, NULL, 0, 1);
HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));");
Сценарий test.php запущен, но, похоже, он не получает правильные данные.
Может ли кто-нибудь дать мне дополнительную помощь или где-нибудь посмотреть? Спасибо.
То же самое и с заголовками.






Здесь - общее описание того, что в этом участвует. По сути, вам нужно создать HTTP-запрос на веб-адрес, прикрепить информацию к запросу и затем отправить его. В вашем случае запрос должен быть POST-запросом.
Давайте делать это шаг за шагом.
Сначала задействованы HTTP-заголовки:
Затем вам нужно создать строку с содержимым формы POST. Предположим, у вас есть входной файл с именем:
file=filename.txt
<You now add the content of the file after that carriage return>
Вы вычисляете длину этой строки и указываете Content-Length выше.
Хорошо, полный HTTP-запрос будет выглядеть так:
POST /file_upload.php HTTP/1.0
Content-type: multipart/form-data
Content-length: <calculated string's length: integer>
file=filename.txt
...File Content...
Теперь немного кода из руководства по PHP:
<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
Зная меня, я, вероятно, испортил формат контента, но это общая идея.
Изменение данных формы и заголовков, которые у меня были выше, на следующее, решило проблему:
static TCHAR frmdata[] = "-----------------------------7d82751e2bc0858\nContent-Disposition: form-data; name=\"uploadedfile\"; filename=\"file.txt\"\nContent-Type: text/plain\n\nfile contents here\n-----------------------------7d82751e2bc0858--";
static TCHAR hdrs[] = "Content-Type: multipart/form-data; boundary=---------------------------7d82751e2bc0858";
Видишь ли, у меня был неправильный формат контента. Я сказал вам multipart, но дал вам другой формат :(
Да, но вы определенно помогли мне посмотреть в правильном направлении :)
О, спасибо, дружище. Очень рад, что указал вам в правильном направлении :)
Мне жаль, что я не добавил эту маленькую информацию: HTTP работает с \ r \ n. Так что вам придется добавить еще один и увеличить до 26.