2011-03-11 95 views
0

我已經使用允許POST和GET請求的Django-Piston構建了一個Web服務。作爲測試的一部分,我寫了一個快速的Python腳本。使用腳本,我可以成功執行這兩種請求;但是,當用Java編寫的客戶端嘗試執行POST時,出現錯誤:「POST/api/service/HTTP/1.1」400 225「 - 」「Apache-HttpClient/4.1(java 1.5)」Django-Piston和Python客戶端與Java客戶端

My理解是由任何語言生成的http請求消息必須是相同的。換句話說,如果我使用python客戶端測試我的web服務並且它可以工作,那麼它應該適用於所有其他具有http庫的語言。

這裏是這一職位的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中很奇怪。

請幫忙。提前致謝。

回答

2

一點搜索會幫助你很多。這是Google的第一個結果。

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

The reason for the 400 errors is that ExtJS is appending a charset onto the Content-Type field, which causes piston to not interpret the Content-Type correcly. There is an open issue for it at http://bitbucket.org/jespern/django-piston/issue/121/content-type-is-not-being-split-against . I was able to get the example working after I applied the patch and did an easy_install.

這是第二個谷歌的迴應。

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

+0

我碰到那些很好,但因爲這些問題在那裏解決一年前,我想我已經有最新的版本(服務器最近安裝的)。我的utils.py文件與他們提到的相比也略有不同:if ctype == type_formencoded:return None。我如何去應用這個補丁。我嘗試使用補丁--dry-run -p1 piston-121-for-v-0.2.2.patch,但它只是坐在那裏(sry新手在這裏)。 – Przemek 2011-03-11 23:52:13

+0

我最終手動進行了更改。我不確定這是否會影響未來的更新。感謝您的幫助,解決了這個問題。讓我知道,如果我補丁的方式會在稍後導致我的問題。 – Przemek 2011-03-12 00:53:10