request.post () работает с URL-адресом, но дает ответ 500 при запуске в python - PullRequest
0 голосов
/ 07 мая 2020

Когда я копирую и вставляю значение payload1 в URL-адрес API, я получаю ответ 200. Это URL-адрес:

https://api.usaspending.gov/api/v2/bulk_download/awards/

Однако, когда я запускаю код в python через request.post (), я получаю ответ 500. Моя конечная цель - поместить возвращенный zip-файл в python, чтобы я мог автоматизировать получение данных. Я новичок в API и некоторый опыт работы с python, поэтому я хотел бы, чтобы код был как можно более простым. Заранее спасибо.

import requests

payload1 = {
"filters": {
"prime_award_types": [
"A",
"B",
"C",
"D",
"IDV_A",
"IDV_B",
"IDV_B_A",
"IDV_B_B",
"IDV_B_C",
"IDV_C",
"IDV_D",
"IDV_E",
"02",
"03",
"04",
"05",
"10",
"06",
"07",
"08",
"09",
"11"
],
"agency": 66,
"date_type": "action_date",
"date_range": {"start_date":"2019-01-01","end_date":"2019-01-31"}
},
"columns": [],
"file_format": "csv"
}

response = requests.post('https://api.usaspending.gov/api/v2/bulk_download/awards/', data = payload1)

Ответы [ 2 ]

1 голос
/ 07 мая 2020

попробуйте использовать json в качестве ответа полезной нагрузки:

url = "https://api.usaspending.gov/api/v2/bulk_download/awards/"
requests.post(url, json = payload1)
0 голосов
/ 07 мая 2020

Вы можете сохранить полезную нагрузку в файле, загрузить ее в переменную и передать ее функции публикации библиотеки запросов. Таким образом, у вас будет:

import requests
with open('desired_payload.txt','rt') as f:
    desired_payload = f.read()


url = 'https://api.usaspending.gov/api/v2/bulk_download/awards/'
headers = {'Content-Type': 'application/json'}
resp = requests.post(url, headers=headers, data=desired_payload)
if resp.status_code == 200:
    print('success')
    print(resp.content)
else:
    print('fail')

С помощью этого скрипта я могу получить успешный ответ , который содержит status_url, file_name, file_url, ... для zip-файл.

...