Отправка HTTP-сообщения с Python, пропущенные значения при работе с почтальоном - PullRequest
0 голосов
/ 18 июня 2019

Я хочу отправить три значения на локальный сервер, но, очевидно, всегда есть пропущенные значения.Если я делаю все это с Почтальоном, все работает, хотя я использую точно такой же заголовок и точно такое же тело.

Я попытался оставить заголовок целиком и сделать значения теластатический и контролируемый пользователем.Я также искал другие проблемы HTTP POST с python, которые есть у людей.

Код сервера:

import json
from urllib.parse import urlparse
import requests
from flask import Flask, jsonify, request

@app.route('/transactions/new', methods=['POST'])
def new_transaction():
values = request.get_json(force=True)

# Check that the required fields are in the POST'ed data
required = ['sender', 'recipient', 'amount']
if not all(k in values for k in required):
    return 'Missing Values', 400

# Create a new Transaction
index = blockchain.new_transaction(values['sender'], values['recipient'], values['amount'])
response = {'message': f'Transaction will be added to Block {index}'}
return jsonify(response), 201

Код клиента:

import urllib.request
import requests

if user_input == "-s" != "--send":
    send_recipient = input("Please enter the address of the recipient: ")
    send_amount = input("Please enter the amount you want to send: ")
    node_identifier = 12345678

    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    r = requests.post("http://localhost:5000/transactions/new", data={'sender': node_identifier, 'recipient': send_recipient, 'amount': send_amount}, headers=headers)

В консоли сервера явсегда получайте код 400 вместо 201. Когда я использую Почтальон, все работает, и 201 появляется.

1 Ответ

1 голос
/ 18 июня 2019

Используйте values = request.form вместо request.get_json,

LOG:

ImmutableMultiDict([('sender', '12345678'), ('recipient', 'ab'), ('amount', 'ab')])

127.0.0.1 - - [18 / Jun / 2019 12:20:41] "POST / транзакции/ new / HTTP / 1.1 " 201

Дополнительная информация: Как получить данные, полученные в запросе Flask

Вы также можете проверить с помощью Postman, например:это: Postman test

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