Отправлять и получать простые сообщения JSON через HTTP - PullRequest
1 голос
/ 10 мая 2019

Я хочу отправлять и получать простые данные по HTTP.

Вот серверная сторона:

import time
import BaseHTTPServer
import json

HOST_NAME = 'localhost' 
PORT_NUMBER = 9000 

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_POST(self):
        print "You've got mail!"
        content_len = int(self.headers.getheader('content-length', 0))
        body = self.rfile.read(content_len)
        data = json.loads(body)
        print data

if __name__ == '__main__':
    server_class = BaseHTTPServer.HTTPServer
    httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
    print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, 
PORT_NUMBER)
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()
    print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)

Вот клиентская сторона:

import requests
import json

url = 'http://localhost:9000'
data = {
    'date': 'the best day',
    'time': 'the best time',
    'name': 'Janet Smith'
}

r = requests.post(url, json=data)
print r.status_code
print r.json() 

Я получаю эту ошибку:

Traceback (последний вызов был последним): Файл "testSend.py", строка 17, в

r = запросы.пост (url, json = данные)

Файл "/Library/Python/2.7/site-packages/requests/api.py", строка 116, в записи запрос на возврат ('post', url, data = data, json = json, ** kwargs)

Файл "/Library/Python/2.7/site-packages/requests/api.py", строка 60, в запросе

вернуть session.request (method = method, url = url, ** kwargs)

Файл "/Library/Python/2.7/site-packages/requests/sessions.py", строка 524, в запросе

resp = self.send (prep, ** send_kwargs)

Файл "/Library/Python/2.7/site-packages/requests/sessions.py", строка 637, в отправке

r = adapter.send (запрос, ** кваргс)

Файл "/Library/Python/2.7/site-packages/requests/adapters.py", строка 498, в отправке

поднять ConnectionError (ошибка, запрос = запрос)

request.exceptions.ConnectionError: ('Соединение прервано.',

BadStatusLine ( "'"))

EDIT: Первоначально я также сталкивался с ошибкой на стороне сервера, но похоже, что проблема могла быть в строке вставленного кода. Я переписал все, и теперь это работает.

1 Ответ

1 голос
/ 11 мая 2019

Оказалось, что было несколько проблем:

  1. Ошибка на стороне сервера была вызвана копированием кода вставки.Мне нужно было заново сделать отступ.

  2. Ошибка на стороне клиента была исправлена ​​добавлением self.send_response (200) к моей функции DO_POST на стороне сервера

  3. Выполнение # 2 вводит новую ошибку «не удается декодировать JSON».Это связано с тем, что ответ от сервера не содержит сообщения json.Поэтому мне просто нужно закомментировать строку print r.json () или отправить сообщение json на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...