您好我正在尝试使用grails进行POST我尝试了2种不同的方法。 我想要复制这个curl命令:
curl -F upload=@in.xml http://server.com/service.pl > out.xml
这个命令工作正常。 到目前为止我所尝试的是以下内容:
def actualInputFile = new File("/path/to/file/in.xml");
def retval = [success: false, message: null];
HttpClient postClient = new HttpClient();
MultipartPostMethod postMethod = new MultipartPostMethod('http://server.com/service.pl');
postClient.httpConnectionManager.getParams().setSoTimeout(300000);
postMethod.addParameter("upload",actualInputFile);
int status = postClient.executeMethod(postMethod);
def data = postMethod.getResponseBodyAsString();
postMethod.releaseConnection();
def returnedFile = new File("/path/to/file/out.xml");
returnedFile.write(data);
这给出了500错误
我也尝试过:
def actualInputFile = new File("/path/to/file/in.xml");
def http = new HTTPBuilder( 'http://server.com/service.pl' )
println "START POST"
def postBody = [upload:actualInputFile] // will be url-encoded
http.post( body: postBody,
requestContentType: XML ) { resp ->
println "POST Success: ${resp.statusLine}"
}
这根本不起作用。
获得500的第一个使用折旧方法。
任何想法?
答案 0 :(得分:0)
我假设您正在尝试从控制器运行此代码,如果是这样,我建议不要使用commons-httpclient,因为它会引入许多依赖项,因为通常难以使用。与Grails一起使用的推荐客户端是http://grails.org/plugin/rest-client-builder
您的示例可以写成:
def rest = new RestBuilder('http://server.com/service.pl' )
def resp = rest.post(url) {
upload = new File("/path/to/file/in.xml")
}
println resp.status
然而,如果你必须使用commons-httpclient,那么如果你实际发布了你所看到的实际错误,那将会有什么帮助。只是说你没有发布错误消息而得到500就没有太大帮助。
答案 1 :(得分:0)
这有点令人困惑。从Perl和Curl看,您尝试将XML发布到API。那是对的吗?
如果是这样,你可以轻松地做到这一点,但你必须指定标题并构建你的api以接受XML并解释它。
然而,我可能会误解。