4

我想使用 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 脚本正在运行,但它似乎没有得到正确的数据。

任何人都可以给我任何额外的帮助或寻找的地方吗?谢谢。

4

3 回答 3

2

让我们一步一步来。

首先涉及的 HTTP 标头:

  1. 内容类型:多部分/表单数据
  2. 内容长度:<这取决于内容字节的总和>

然后,您必须使用 POST 表单的内容构建一个字符串。假设您有输入命名文件:

file=filename.txt
<您现在在回车后添加文件内容>

你计算这个字符串的长度并放在上面的 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>";

?>

了解我,我可能弄乱了内容的格式,但这是一般的想法。

于 2008-10-02T20:43:46.057 回答
1

将我上面的表单数据和标题更改为以下解决了该问题:

  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";
于 2008-10-03T14:54:12.267 回答
0

是对其中涉及的事物的一般描述。基本上,您必须创建一个对 Web 地址的 HTTP 请求,将信息附加到请求中,然后发送它。在您的情况下,该请求必须是 POST 请求。

于 2008-10-02T20:04:06.713 回答