TypeError('недопустимая нестроковая последовательность или объект сопоставления',)

Я использую запрос aiohttp get для загрузки некоторого контента из другого веб-API, но я получаю:

exception = TypeError('not a valid non-string sequence or mapping object',)

Ниже приведены данные, которые я пытаюсь отправить.

data = "symbols=LGND-US&exprs=CS_EVENT_TYPE_CD_R(%27%27,%27now%27,%271D%27)"

Как это решить?

Я пробовал 2 способами:

r = yield from aiohttp.get(url, params=data) # and
r = yield from aiohttp.post(url, data=data)

В то же время я могу получить данные, используя:

r = requests.get(url, params=data) # and
r = requests.post(url, data=data)

Но мне нужна асинхронная реализация.

А также предложите мне какой-нибудь способ, если я могу использовать библиотеку import requests вместо import aiohttp для выполнения асинхронного http-запроса, потому что во многих случаях запрос aiohttp post & get не работает, но то же самое работает для запросов request.get и post.


person user3540276    schedule 06.11.2015    source источник


Ответы (1)


В документах для аргумента data используются байты (т. е. префикс 'b').

r = await aiohttp.post('http://httpbin.org/post', data=b'data')

Кроме того, аргумент params должен быть словарем или списком кортежей.

person miles82    schedule 06.11.2015
comment
я пробовал с вышеуказанным решением, но теперь я получаю ошибку при вводе 405 - person user3540276; 06.11.2015
comment
Не могли бы вы уточнить это? Вы имеете в виду ошибку HTTP 405 (метод не разрешен)? Вероятно, вы выполняете POST, а страница позволяет только GET или наоборот. Для GET вам нужно использовать аргумент params вместо данных, но это должен быть словарь или список, как я отметил выше. - person miles82; 06.11.2015
comment
@miles82 требование было смягчено в https://github.com/KeepSafe/aiohttp/pull/587. - person Andrew Svetlov; 07.11.2015