0

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 に何か問題があることを意味します。

助けてください。前もって感謝します。

4

1 に答える 1

2

少し検索すると、非常に役立ちます。これが Google の最初の結果でした。

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

400 エラーの理由は、ExtJS が Content-Type フィールドに文字セットを追加しているためです。これにより、ピストンは Content-Type を正しく解釈しません。http://bitbucket.org/jespern/django-piston/issue/121/content-type-is-not-being-split-againstには未解決の問題があり ます。パッチを適用して easy_install を実行すると、サンプルが機能するようになりました。

これは 2 回目の Google の回答です。

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

于 2011-03-11T23:35:20.167 に答える