WinInet を使用してファイルを Hadoop にアップロードしようとしています。私は正しく考えることができるすべてのことをしています。IOW、リダイレクトの取得を含め、WebHDFS の REST API に従っています。次に、リダイレクトで提供された URI を使用して新しいリクエストを送信します。2 番目の要求を行うと、Fiddler でスパイすると、本来の HTTP ステータス コード 201 が返されることがわかります。
2 番目の要求は次のようになります。
HttpOpenRequest()
PUT の動詞で呼び出すために必要な WinInet 処理を行います (成功)- hRequest
HttpSendRequestEx()
を除くすべての NULL で呼び出す (成功) - を使用してファイルにデータを書き込みます
InternetWriteFile()
(書き込みを試みたのと同じ正しい書き込みバイト数で成功します) - 呼び出し
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 を実行するためのトリックはありますか?