2014-01-24 29 views
1

我想使用clj-http創建多部分HTTP請求。多要求低於:如何使用clj-http api在clojure中創建多部分請求

--Boundary 

Content-Type: text/xml; charset=UTF-8 

Content-Id id1 

xml1 

--Boundary 
Content-Type: text/xml; charset=UTF-8 
Content-Id id2 

xml2 

--Boundary-- 

我用這Clojure的代碼來構建多要求:

(post "url" 
     {:multipart [{:name "XML1" 
        :content Xml1 
        :encoding "UTF-8" 
        :mime-type "text/xml"} 
        {:name "XML2" 
        :content Xml2 
        :encoding "UTF-8" 
        :mime-type "text/xml"}]}) 

我怎樣才能在多添加Content-Id

回答

0

如果你把內容ID作爲標題,添加:Content-Id "Id 1"您的要求的地圖應該幫助,更改爲:

{:name "XML1" 
:content Xml1 
:Content-Id "Id 1" 
:encoding "UTF-8" 
:mime-type "text/xml"} 

如果你把內容ID作爲體,把它放在身體

+0

我們已經嘗試過這個選項,但它不工作.https://github.com/dakrone/clj-http/blob/master/src/clj_http/multipart.clj ----- multipart.clj的鏈接api ,沒有使用content-id來創建多部分請求。是否有任何其他方式將content-id添加到多部分請求 – Jitendra

1

:name屬性用於給出實體的名稱,即multipart的第1個內容等等。

Clojure缺少這個功能來添加多部分請求中的內容ID。 但是,在clojure中,clj-http客戶端在內部使用http-client api來構建多部分請求。請參閱this 關於如何在clj-http中創建多部分的鏈接。

clj-http client沒有在任何地方使用內容id。因此,有一點很清楚,我們無法使用content-id創建 多部分請求。

我發現的一個解決方案,只需在clojure中導入http-client包並創建多部分請求。無需下載任何http-client jar,因爲我使用http-client作爲依賴項告訴clj-http。

(:import (java.nio.charset Charset) 
      (org.apache.http.entity.mime MultipartEntity) 
      (org.apache.http.entity.mime FormBodyPart) 
      (org.apache.http.entity.mime HttpMultipartMode) 
      (org.apache.http.entity.mime.content 
      ByteArrayBody 
      FileBody 
      InputStreamBody 
      StringBody)) 

只需使用下面的函數模板來創建您自己的請求。 並將多部分對象設置爲:http請求的主體。 但是,這不是純粹的clojure實現。這是臨時解決方案。

(defn build-form-body [formbody content cid] 
    (let [sb (StringBody. content "text/xml" (Charset/forName "utf-8"))] 
    (let [fb (FormBodyPart. formbody , sb)] 
    (.addField fb "Content-Id" cid) 
    fb))) 

(defn build-multipart [] 
    (let [mp-entity (MultipartEntity.)] 
    (.addPart mp-entity (make-form-body "formbody1" Xml1 "content-id1-val")) 
    (.addPart mp-entity (make-form-body "formbody2" Xml2 "content-id1-val2")) 
    mp-entity)) 

注意:給出正確的內容類型。在我的情況下,它是XML,所以對我來說「text/xml」和字符串正文。 如果文件然後內容類型將更改並使用FileBody等。

希望它能幫助你。