POST および GET 要求を許可する Django-Piston を使用して 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 に何か問題があることを意味します。
助けてください。前もって感謝します。