2011-08-15 23 views
4

我目前使用PycURL通過發佈到某個URL來觸發Jenkins中的構建。相關代碼如下:如何使用標準Python庫通過HTTP發佈文件

curl = pycurl.Curl() 
curl.setopt(pycurl.URL, url) 
# These are the form fields expected by Jenkins 
data = [ 
     ("name", "CI_VERSION"), 
     ("value", str(version)), 
     ("name", "integration.xml"), 
     ("file0", (pycurl.FORM_FILE, metadata_fpath)), 
     ("json", "{{'parameter': [{{'name': 'CI_VERSION', 'value':" 
      "'{0}'}}, {{'name': 'integration.xml', 'file': 'file0'}}]}}". 
       format(version,)), 
     ("Submit", "Build"), 
     ] 
curl.setopt(pycurl.HTTPPOST, data) 
curl.perform() 

正如你所看到的,後參數(「file0」)中的一個文件,通過參數類型pycurl.FORM_FILE所示。

如何用標準Python庫替換PycURL的使用?

+0

是純粹的Python包好的還是你真的想單獨使用標準庫? –

+0

@PiotrDobrogost嗯,這個問題真的是關於標準庫,但我想你可以發佈一個純Python解決方案作爲參考。我可以用[請求](http://python-requests.org)庫自己解決問題。 – aknuds1

+0

這就是我想推薦的。請參閱[使用POST腳本從Python腳本發送文件](http://stackoverflow.com/q/68477/95735) –

回答

1
u = urllib.urlopen(url, data=urllib.urlencode(
          {'name': 'CI_VERSION', 
           'value': str(version), 
           'file0': open(metadata_fpath).read(), 
           etc. 
           etc.})) 

你可以用urllib/urllib2來做到這一點。以上是發送POST請求的最簡單示例。

+2

有關urllib2的更多信息,請參見http://www.voidspace.org.uk/python/articles/urllib2.shtml – Devraj

+0

這並不涉及發佈文件的問題,是嗎?使用urllib *發送直串字符串參數應該很簡單。 – aknuds1

+0

我認爲這適用於發佈文件。只需使用'open(metadata_fpath).read()'作爲攻擊密鑰'file0'的值。我會將其添加到答案中。 – agf

相關問題