Django-Piston и Python Client против Java-клиента - PullRequest
0 голосов
/ 12 марта 2011

Я создал веб-сервис, использующий Django-Piston, который позволяет выполнять запросы POST и GET.В рамках тестирования я написал быстрый скрипт на Python.Используя скрипт, я могу успешно выполнять оба типа запросов;однако, когда клиент, написанный на Java, пытается выполнить POST, я получаю сообщение об ошибке: «POST / api / service / HTTP / 1.1« 400 225 »-« «Apache-HttpClient / 4.1 (java 1.5)» *

Насколько я понимаю, сообщение http-запроса, генерируемое любым языком, должно быть одинаковым.Другими словами, если я тестирую свой веб-сервис с использованием клиента Python, и он работает, то он должен работать для всех других языков, имеющих библиотеку http.

Вот код Python для POST:

 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.

Пожалуйста, помогите.Заранее спасибо.

1 Ответ

2 голосов
/ 12 марта 2011

Небольшой поиск вам очень поможет. Это был первый результат 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.

Это второй ответ Google.

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

...