httpbuilderで大苦戦
GroovyのHTTPBuilderで大苦戦している。
やりたいことはあるWeb APIで「multipart/form-dataでパラメータを送りなさい」というのがあって…
つまり
Content-Type: multipart/form-data; boundary=-AaB03x ---AaB03x Content-Disposition: form-data; name="username" Kumappus ---AaB03x Content-Disposition: form-data; name="secret" sdflasdfjasd;askd;io;ksdjf;lksa;ljふじこ ---AaB03x--
みたいな感じで送らないといけない。で、調べてみるとHTTPBuilderの0.5.2-SNAPSHOTにmultipart form post機能が追加されているらしいので、まずはPOSTしてみようと次のようなGroovyソースを書いてみた
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.2-SNAPSHOT' ) @Grab(group='org.apache.httpcomponents', module='httpcore', version='4.1.3') @Grab(group='org.apache.httpcomponents', module='httpcore-nio', version='4.1.3') @Grab(group='org.apache.httpcomponents', module='httpclient', version='4.1.2') @Grab(group='org.apache.httpcomponents', module='httpmime', version='4.1.2') import static groovyx.net.http.Method.* import static groovyx.net.http.ContentType.* import org.apache.http.entity.mime.MultipartEntity import org.apache.http.entity.mime.HttpMultipartMode import org.apache.http.entity.mime.content.FileBody import org.apache.http.entity.mime.content.StringBody def http = new groovyx.net.http.HTTPBuilder('http://example.com/') http.request(POST){ uri.path = 'mform.html' body = [status : 'update!', source : 'gegegege'] requestContentType = groovyx.net.http.ContentType.URLENC response.success = { resp -> println("status: ${resp.statusLine}") assert resp.statusLine.statusCode == 200 } }
ところが、これだとなんとNullPointerExceptionが出て
body = [status : 'update!', source : 'gegegege']
のところで失敗する。うーん、何がおかしいんだろう。これができないのでマルチパートの方の実験もできぬわ。