2016-09-30 4 views
0

私はArangoに何千ものレコードをインポートしようとしています。私は、Arangoのバッチ/バルクインポート機能を使用して、https://docs.arangodb.com/3.0/HTTP/BatchRequest/index.htmlにPUTとPOSTリクエストを組み合わせて新しいレコードを挿入するか、既存のレコードがすでに存在する場合は更新するようにしています。私の最終的な解決策はPyArangoを使用してPythonスクリプトから実行する必要があります。私は、これはアランゴで正常に処理するために取得することができていないArangoDBへのバッチリクエストが失敗する

Content-Type: multipart/form-data; boundary=P1X7QNCB 
Content-Length: <calculated by python or REST Client> 
Authorization: Basic <calculated by python requests session or REST Client> 

--P1X7QNCB 
Content-type: application/x-arango-batchpart 
Content-Id: 1 

POST /_api/document/model/foo HTTP/1.1 


{"data": "bar"} 
--P1X7QNCB 

:私は次のようになりますサンプルHTTPリクエスト

POST http://<arango_server>:8529/_db/myDB/_api/batch 

を作成しました。

url = "/_api/document/" + collection + "/" + nodeKey + " HTTP/1.1" 
postString = ("--P1X7QNCB\r\n" 
       "Content-type: application/x-arango-batchpart\r\n" 
       "Content-Id: " + str(counter) + "\r\n" 
       "\r\n" 
       "\r\n" 
       "PUT " + url+ "\r\n\r\n\r\n" + json.dumps(nodeData) + "\r\n") 
batchHeaders = {"Content-Type": "multipart/form-data; boundary=P1X7QNCB"} 
response = self.db.connection.session.post(self.db.URL + "/batch", data=postString, headers=batchHeaders) 

と私は手動でコンテンツを投稿するRESTクライアントを使用して:私は(それはコードの私の近似は、以下のタイプミスがあっても、上記の要求を生成)次のようなのpythonを使用して試してみました。

{"error":true,"errorMessage":"invalid multipart message received","code":400,"errorNum":400} 

そして次は、アランゴログファイルに記録されています:

WARNING received a corrupted multipart message 

は私が間違っているの何誰にもそれは明らかである、またはどこ私ができる両方のケースでは、私は戻って、次の応答を取得しますなぜArangoDBがリクエストを拒否しているのかについて詳しく調べてみてください。

ありがとうございます!

答えて

1

next part of a multipart mime containerを抽出しようとするとArangoDBがこのエラーをスローして失敗します。

あなたの境界文字列を検査し、最後の文字列が正しく、本当にプログラムによって送らいただきまし検査することは非常に便利になる傾向があり2つの末尾のダッシュ(--

NGrepまたはWiresharkでコンテナを終了することを確認する必要があります - それはよいです時にはあなたが思うものではない - あるいは、他のプログラムからそれをどうやって行うかのサンプルを得ることさえできます。

+0

ありがとうございました。私は最後の境界文字列に " - "を終えていませんでした。しかし、修正されたArangoはレスポンス200でマルチパートリクエストを受け付けますが、個々のマルチパートレスポンスは{"error":true、 "errorMessage": "'METHOD' not implemented" "code":501、 errorNum ":9}。 「バッチ」リクエストを有効にするために必要なことはありますか?私はLinux上でArangoDB 3.0.6を実行しています。 – muddlednbefuddled

+0

更新:私はバッチポストを働かせました。私の2番目の問題は、マルチパートヘッダーとPOST/PUTコマンドの間の二重のスペースでした。 arangod multipartパーサーは1つのスペースを必要とするように見え、ヘッダーの後ろの2行目に 'METHOD'があることを期待しています。 – muddlednbefuddled

関連する問題