我已經使用允許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中很奇怪。
請幫忙。提前致謝。
我碰到那些很好,但因爲這些問題在那裏解決一年前,我想我已經有最新的版本(服務器最近安裝的)。我的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
我最終手動進行了更改。我不確定這是否會影響未來的更新。感謝您的幫助,解決了這個問題。讓我知道,如果我補丁的方式會在稍後導致我的問題。 – Przemek 2011-03-12 00:53:10