【问题标题】:Django-Piston and Python Client Vs Java ClientDjango-Piston 和 Python 客户端与 Java 客户端
【发布时间】:2011-03-11 23:16:29
【问题描述】:

我使用 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 有问题。

请帮忙。提前致谢。

【问题讨论】:

    标签: java python apache django-piston


    【解决方案1】:

    稍微搜索一下会对您有很大帮助。这是 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。 我能够使示例正常工作 在我应用补丁并做了一个之后 轻松安装。

    这是 Google 的第二次回复。

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

    【讨论】:

    • 我也遇到过这些问题,但自从一年前解决了这些问题以来,我认为我已经拥有当前版本(服务器是最近安装的)。与他们提到的相比,我的 utils.py 文件也略有不同:如果 ctype == type_formencoded: return None。我该如何应用这个补丁。我尝试使用补丁 --dry-run -p1 bitcoin-121-for-v-0.2.2.patch 但它就在那里(这里是新手)。
    • 我最终手动进行了更改。我不确定这是否会破坏未来的更新。感谢您的帮助,这解决了问题。让我知道我修补此问题的方式是否会在以后给我带来问题。
    猜你喜欢
    • 2011-05-15
    • 2017-07-05
    • 1970-01-01
    • 2010-12-18
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2014-05-15
    相关资源
    最近更新 更多