httplib POST на сервер REST работает неправильно (отсутствуют символы тела)

Я наткнулся на странную ситуацию, когда использование httplib в качестве моего http-клиента для REST-сервера (не реализованного мной, но полностью функционального) обрезает символы в конце тела http-запроса. В частности, я пытаюсь отправить сообщение JSON, которое я точно знаю, так как я печатаю его правильно (я проверил его), но при получении от сервера в конце отсутствуют 2 символа, поэтому синтаксический анализ JSON на сервере не работает.

Это действительно странно, так как сообщение правильное при отправке через curl и через java httpconnection, но с python httplib im эта проблема возникает только с POST, имеющим тело JSON (нет проблем для POST без тела или GET).

мой код функции очень прост и выглядит следующим образом:

def sendReq(endpoint, port, method, url, msg, headers)
    client = httplib.HTTPConnection(endpoint, port)
    client.set_debuglevel(1)

    client.request(method, url, msg, headers)

    resp = client.getresponse()
    print resp.status, resp.reason

    client.close()

примечание: я использую python 2.7.x, и сообщение, которое я отправляю, составляет около 250-750 символов.


person dtrihinas    schedule 05.01.2016    source источник
comment
Я не могу воспроизвести это. Не могли бы вы отредактировать свой вопрос, чтобы показать JSON, который вы отправляете в msg, и любые headers?   -  person Chris Nauroth    schedule 06.01.2016
comment
@ChrisNauroth решил мою проблему, просто переместив httplib2, который имеет почти идентичную функциональность ... Я не понимаю проблемы, поскольку я ничего не менял в отношении отправляемого им JSON ... Я предпочитаю не раскрывать JSON, который я отправлял ... в любом случае, спасибо за попробуй!   -  person dtrihinas    schedule 06.01.2016
comment
Я рад слышать, что вы нашли решение. :-)   -  person Chris Nauroth    schedule 06.01.2016


Ответы (1)


Теперь лучше использовать модуль python-requests, модуль httplib почти устарел...

С уважением

person A STEFANI    schedule 09.03.2016