Представление Django, получающее неполную полезную нагрузку POST

У меня есть простое представление следующим образом:

@csrf_exempt
def stackcommits(request):
    print request.body
    return HttpResponse("")

Когда я отправляю POST по URL-адресу, сопоставленному с этим представлением, моя консоль показывает неполную и неработающую полезную нагрузку. Это примерно треть размера, который должен быть, и даже тогда третья часть, которую я получаю, не является последовательной и доставляется в виде пары случайных кусков. Как следует:

2014-09-30 18:47:21
<QueryDict: {u'payload': [u'{"zen":"Avoid administrative distraction.","hook_id":3103635,"hook":{"url":"https://api.github.com/repos/valeyard/SearchDemon/hooks/3103635","test_url":"https://api.github.com/repos/valeyard/SearchDemon/hooks/3103635/test","id":3103635,"name":"web","active":true,"events":["push"],"config":{"secret":"","url":"http://searchdemon.pythonanywhere.com/searchdemon/stackcommits/","content_type":"json","insecure_ssl":"0"},"last_response":{"code":null,"status":"unused","message":null},"updated_at":"2014-09-29T20:56:33Z","created_at":"2014-09-29T20:56:33Z"},"repository":{"id":24075885,"name":"SearchDemon","full_name":"valeyard/SearchDemon","owner":{"login":"valeyard","id":5278331,"avatar_url":"https://avatars.githubusercontent.com/u/5278331?v=2","gravatar_id":"","url":"https://api.github.com/users/valeyard","html_url":"https://github.com/valeyard","followers_url":"https://api.github.com/users/valeyard/followers",

2014-09-30 18:47:21
.github.com/repos/valeyard/SearchDemon/issues{/number}","pulls_url":"https://api.github.com/repos/valeyard/SearchDemon/pulls{/number}","milestones_url":"https://api.github.com/repos/valeyard/SearchDemon/milestones{/number}","notifications_url":"https://api.github.com/repos/valeyard/SearchDemon/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/valeyard/SearchDemon/labels{/name}","releases_url":"https://api.github.com/repos/valeyard/SearchDemon/releases{/id}","created_at":"2014-09-15T22:10:54Z","updated_at":"2014-09-24T17:12:44Z","pushed_at":"2014-09-29T20:42:34Z","git_url":"git://github.com/valeyard/SearchDemon.git","ssh_url":"[email protected]:valeyard/SearchDemon.git","clone_url":"https://github.com/valeyard/SearchDemon.git","svn_url":"https://github.com/valeyard/SearchDemon","homepage":null,"size":1172,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":tr

Любые идеи? Мне сказали, что это не проблема инфраструктуры в PA, так что, скорее всего, это что-то с моей стороны. Но я понятия не имею, что


person user1079404    schedule 30.09.2014    source источник
comment
как вы публикуете? Не могли бы вы опубликовать код того, что/как вы публикуете.   -  person awwester    schedule 30.09.2014
comment
Да, конечно, это POST-запросы Github webhook, я проверил, что Github отправляет их правильно, используя следующее: requestb. в /qhgo7nqh?inspect вы можете увидеть полезную нагрузку, отправляемую из Github.   -  person user1079404    schedule 30.09.2014


Ответы (2)


Я думаю, вы просто видите артефакт регистрации. Сообщение доставляется как одиночный POST, но регистратор разбивает сообщение, потому что оно слишком длинное. Вместо простого print сообщения (которое отправляет его в журнал сервера) используйте print >> sys.stderr, request.body, и оно появится в журнале ошибок без усечения.

person Glenn    schedule 01.10.2014

Я предполагаю, что ваш оператор печати усекает вывод str(request.body), который происходит неявно, но фактическое содержимое POST присутствует. Попробуй это:

import pprint

@csrf_exempt
def stackcommits(request):
    pprint.pprint(request.body)
    return HttpResponse("")
person Tiago    schedule 30.09.2014
comment
Только что попробовал это, но, похоже, все еще делает то же самое. Когда я заставляю Github использовать заголовок urlencode (в отличие от json), я, кажется, постоянно получаю 3 отдельных фрагмента, появляющихся в журнале сервера при печати. Я получаю начало, где-то в середине, а затем конец запроса. Но есть много случайно пропущенных между ними. Можете ли вы придумать какой-либо другой способ проверить, правильно ли мой сервер получает данные? - person user1079404; 30.09.2014