1

WinInet を使用してファイルを Hadoop にアップロードしようとしています。私は正しく考えることができるすべてのことをしています。IOW、リダイレクトの取得を含め、WebHDFS の REST API に従っています。次に、リダイレクトで提供された URI を使用して新しいリクエストを送信します。2 番目の要求を行うと、Fiddler でスパイすると、本来の HTTP ステータス コード 201 が返されることがわかります。

2 番目の要求は次のようになります。

  1. HttpOpenRequest()PUT の動詞で呼び出すために必要な WinInet 処理を行います (成功)
  2. hRequestHttpSendRequestEx()を除くすべての NULL で呼び出す (成功)
  3. を使用してファイルにデータを書き込みますInternetWriteFile()(書き込みを試みたのと同じ正しい書き込みバイト数で成功します)
  4. 呼び出しHttpEndRequest()(成功)

すべてが成功し、当然のことながら、データはサーバー上にあるはずです。代わりに、空のファイルがあります。curl を使用して同じことを試みると、成功します。Fiddle を使用して WinInet をスパイすると、データがサーバーに書き込まれていることがまったく確認されないことを除いて、すべてが成功していることがわかります。

HttpEndRequest() を呼び出した後に返されるヘッダーは次のとおりです。

HTTP/1.1 201 Created
Cache-Control: no-cache
Expires: Fri, 12 Jun 2015 00:22:57 GMT
Date: Fri, 12 Jun 2015 00:22:57 GMT
Pragma: no-cache
Expires: Fri, 12 Jun 2015 00:22:57 GMT
Date: Fri, 12 Jun 2015 00:22:57 GMT
Pragma: no-cache
Location: webhdfs://quickstart.cloudera:8020/user/test.txt
Content-Type: application/octet-stream
Content-Length: 0
Server: Jetty(6.1.26.cloudera.4)

私の腸は、私がやっている InternetWriteFile() で何かが台無しになっていると言いますが、すべてのリターン コードと書き込み値は正常にチェックアウトされます。

私が見逃している WinInet で PUT を実行するためのトリックはありますか?

4

0 に答える 0