4

ファイルをサーバーに投稿する Web フォームを使用してファイルが転送されているかのように、wininet を使用してテキスト ファイルを Web サーバーに転送したいと考えています。

受け取った回答に基づいて、次のコードを試しました。

 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. Content-Length: <これはコンテンツのバイトの合計に依存します>

次に、POST フォームの内容で文字列を作成する必要があります。file という名前の入力があると仮定します。

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 に答える