2011-08-15 9 views
4

現在、JenkinsでビルドをトリガするためにPycURLを使用しています。特定のURLに投稿します。標準の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によって示されるように、ファイルで次のように関連するコードが見えます。

PycURLの使用方法を標準のPythonライブラリに置き換えるにはどうすればよいですか?

+0

純粋なPythonパッケージがOKかあなたが本当に一人で標準ライブラリを使用するようにしたいですか? –

+0

@PiotrDobrogost質問は本当に標準ライブラリについてですが、参照用に純粋なPythonソリューションを投稿できると思います。私は[要求](http://python-requests.org)ライブラリで問題を自分で解決することができました。 – aknuds1

+0

これは私がお勧めしたいものです。 [PythonスクリプトからPOSTを使ってファイルを送信する](http://stackoverflow.com/q/68477/95735) –

答えて

1

標準のpythonライブラリでは、POST要求による投稿ファイルに必要なmultipart/form-dataのサポートがありません。

そこにはいくつかのレシピがhttp://code.activestate.com/recipes/146306-http-client-to-post-using-multipartform-data/を例えばある

+0

このメソッドを使用してJenkinsにファイルをPOSTしようとしていますが、失敗します。この特定の問題に関する私の質問を参照してください:http://stackoverflow.com/questions/7078561/posting-file-to-jenkins-fails。 – aknuds1

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

私はこれがファイルを投稿するためにうまくいくと思います。キー 'file0'を攻撃する値として' open(metadata_fpath).read() 'を使用してください。私はこれを答えに加えます。 – agf

関連する問題