Django-Piston和Python客户端与Java客户端

时间:2011-03-11 23:16:29

标签: java python apache django-piston

我使用Django-Piston构建了一个允许POST和GET请求的Web服务。作为测试的一部分,我写了一个快速的Python脚本。使用该脚本,我可以成功地执行两种类型的请求;但是,当用Java编写的客户端尝试执行POST时,我收到错误:“POST / api / service / HTTP / 1.1”400 225“ - ”“Apache-HttpClient / 4.1(java 1.5)”

我的理解是,由任何语言生成的http请求消息必须相同。换句话说,如果我使用python客户端测试我的Web服务并且它可以工作,那么它应该适用于所有其他具有http库的语言。

以下是POST的python代码:

 import urllib, urllib2

 data = urllib.urlencode({'url': 'www.uvic.ca', 'name': 'uvic'})
 url = 'http://xxx/api/service/'
 req = urllib2.Request(url, data)

 print urllib2.urlopen(req).read() 

这是Java代码:

HttpPost httpost = new HttpPost("http://xxx/api/service/");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("name", "some_name"));
nvps.add(new BasicNameValuePair("url", "www.somename.com"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

response = httpclient.execute(httpost);
entity = response.getEntity();

System.out.println(entity.getContentType());
System.out.println(EntityUtils.getContentCharSet(entity));
System.out.println(EntityUtils.toString(entity));

我开始认为这是一个apache配置问题。我在我的POST方法的开头添加了一些调试语句,而我根本没有打它们。这意味着urls.py文件出了问题(我怀疑它是因为它在python中有效)或者apache有些奇怪。

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:2)

一点点搜索会对你有所帮助。这是Google的第一个结果。

http://weblog.mattdorn.com/content/restful-web-apps-with-django-piston-and-ext-js/

  

400错误的原因是   ExtJS正在追逐一个字符集   Content-Type字段,导致   活塞不解释   内容类型正确。有一个   打开它的问题   http://bitbucket.org/jespern/django-piston/issue/121/content-type-is-not-being-split-against。   我能够让这个例子有效   我应用补丁后做了一个   easy_install的。

这是Google的第二次回复。

https://bitbucket.org/jespern/django-piston/issue/99/bad-request-and-content-type-with-fix