конвертировать вложенный JSON в DICT - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь отправить Json ниже с помощью Scrapy

{
"version": 1,
"message_type": 104,
"message_id": 14,
"body": [
{
  "message_type": 104,
  "chat_message": {
    "mssg": "hello",
    "message_type": 1,
    "uid": "15373703487091",
    "from_person_id": "5134266921",
    "to_person_id": "3093543561",
    "read": false
  }
}
],
"is_background": false
}

Я пытался отправить его жестко, как это

self.postRequest = {"version":"1",
                    "message_type":"104",
                    "message_id":"18",
                    "body":"[{'message_type':'104','chat_message':{'mssg':'hello','message_type':'1','uid':'15372201045381','from_person_id':'5134266921','to_person_id':'3093543561','read':'false'}}]",
                        "is_background":"false"}

yield FormRequest(url=response.url   , formdata=self.postRequest, callback=self.parse_data,dont_filter=True, headers=self.params, cookies=self.cookies)

Я получаю статус HTTP 200 с сообщением об ошибке: Неизвестная команда server_unknown_action.

, поэтому я не знаю, сделал ли я что-то не так со структурой json или ошибка в другом месте

1 Ответ

0 голосов
/ 20 сентября 2018

Класс FormRequest предназначен для отправки данных как Content-Type: application/x-www-form-urlencoded.Отправка JSON как тела POST скорее всего означает, что вы действительно хотите отправить Content-Type: application/json.

. Для этого используйте обычный класс Request, для которого method установлено на POST, а json.dumps() ваш self.postRequest -данных в Request().body.

yield Request(url=response.url,
              method='POST',
              headers={
                  'Content-Type': 'application/json; charset=UTF-8',
              },
              body=json.dumps(self.postRequest),
              callback=self.parse_data,
              dont_filter=True,
              cookies=self.cookies)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...