我想使用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脚本,但它似乎没有获取正确的数据。
有人可以给我任何额外的帮助或某个地方吗?感谢。
答案 0 :(得分:2)
让我们一步一步。
首先是HTTP标题参与:
然后,您必须使用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>";
?>
了解我,我可能搞砸了内容的格式,但这是一般的想法。
答案 1 :(得分: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";
答案 2 :(得分:0)
Here是对其中涉及的事情的一般描述。基本上,您必须创建对Web地址的HTTP请求,将信息附加到请求然后发送。在您的情况下,请求必须是POST请求。