我使用 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 有一些奇怪的地方。
请帮忙。提前致谢。