2016-09-30 101 views
0

我想輸入成千上萬的記錄到Arango。我試圖使用描述於:https://docs.arangodb.com/3.0/HTTP/BatchRequest/index.html的Arango的批量/批量導入功能來執行PUT和POST請求的組合,以插入新記錄,或者如果它們已經存在,則更新現有記錄。我的最終解決方案需要從Python腳本運行,可能使用pyArango。我創建了一個樣本HTTP請求批量請求到ArangoDB失敗

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

,看起來像下面這樣:

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 

我一直沒能得到這個在阿朗戈成功處理。

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客戶端,其中我手動發佈的內容:我已使用類似於以下(其生成上述要求,即使低於我的代碼的近似具有錯別字)蟒試過。在這兩種情況下,我獲得以下響應回:

{"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將拋出此錯誤。

你應該檢查你的邊界字符串,並檢查最後一個字符串正確終止該容器有兩個尾隨破折號(--

NGrepWireshark往往是非常有用的檢查什麼真正的程序發送 - 它可能有時候不是你的想法 - 甚至不知道如何從其他程序中做到這一點。

+0

謝謝。我錯過了最後邊界字符串上的終止「 - 」。然而,對於那個固定的Arango現在接受帶有響應者200的多部分請求,但是單個多部分響應全部是:{「error」:true,「errorMessage」:「'METHOD'not implemented」,「code」:501, ERRORNUM「:9}。是否有需要完成的事情來啓用「批量」請求?我正在Linux上運行ArangoDB 3.0.6。 – muddlednbefuddled

+0

更新:我得到了批處理文章的工作。我的第二個問題是多部分頭文件和POST/PUT命令之間的雙倍空間。 arangod多部分分析器似乎需要一個空格,並希望在標題後面的第二行找到'METHOD'。 – muddlednbefuddled