У меня есть приложение django, которое предоставляет API, URL-адрес которого выглядит следующим образом:
url('^links/', linkhandler),
Обработчик ссылок - это ресурс поршня django, чья POST (функция Create), которую я дал ниже,
def create(self, request):
try:
link_obj = Link.objects.get(link = request.POST['link'])
print link_obj
link_obj.rec_count = link_obj.rec_count+ request.POST.get('rec_count', 1)
link_obj.save()
return link_obj
except:
try:
query_obj = Query.objects.get(query_word = request.POST['query'])
print query_obj
except:
query_obj = Query(query_word = request.POST['query'])
query_obj.save()
link_obj = Link(link = request.POST['link'], rec_count = request.POST.get('rec_count', 1), query = query_obj)
link_obj.save()
return link_obj
Все вышеперечисленное прекрасно, и когда я делаю POST-запрос через CURL, он работает отлично.
Например, ниже приведен мой запрос CURL, который работает,
curl -d "query=hp&link=http://www.shopping.hp.com/&rec_count=1" http://localhost:8000/api/links/
Но когда я пытаюсь сделать это из скрипта greasemonkey, он всегда возвращает ошибку 400: (
Ниже приведен связанный скрипт greasemonkey
GM_xmlhttpRequest({
method:"POST",
url:"http://localhost:8000/api/links/",
headers:{
"User-Agent":"Mozilla/5.0",
"Accept":"text/json",
"Content-Type" : "application/x-www-form-urlencoded"
},
data: encodeURI("query="+GM_getValue('q', '')+"&link="+this.previousSibling.href+"&rec_count=1"),
onerror: function errorhand()
{
alert("error occurred!");
}
});
В чем может быть проблема?