Python POST请求返回代码200,但不存储文件

时间:2020-10-06 18:45:58

标签: python api

我写了一个Python脚本来调用https://gtrendsv4-f2ya73vqjq-uc.a.run.app/request_trends上可用的API。我的问题是API应该生成一个CSV文件并将其存储在我的GCP上。该API正在使用5 string parameterskeyword1keyword2startendcountry。当我使用POSTMAN测试API时,得到的响应码为200,并且csv文件已正确生成并存储。这是我在POSTMAN中的网址:url = "https://gtrendsv4-f2ya73vqjq-uc.a.run.app/request_trends?keyword1=run&keyword2=sun&start=2019-02-01&end=2019-02-12&country=FR"

当我在同一服务上对同一POST请求使用Python代码时,它还会返回200响应代码,但不会生成/存储csv文件。我试图直接在我的python函数上对URL进行硬核化,并且它可以正常工作,所以我认为我只是缺少了一些东西,但我不知道是什么。

def request_trends_service():
    current_position = get_position_reader()
    new_position, keyword_1 = read_line_from_csv(current_position)
    new_position, keyword_2 = read_line_from_csv(new_position)
    save_new_position(new_position)

    url = "https://gtrendsv4-f2ya73vqjq-uc.a.run.app/request_trends?"

    payload = {
        "keyword1": keyword_1,
        "keyword2": keyword_2,
        "start": start,
        "end": end,
        "country": country
    }

    r = requests.post(url, params = payload)
    print(r)

    return r.status_code

更新(从邮递员导出中删除的代码):

import requests

url = "https://gtrendsv4-f2ya73vqjq-uc.a.run.app/request_trends?keyword1=run&keyword2=sun&start=2019-02-01&end=2019-02-12&country=FR"

payload = "{\n    \"keyword1\": \"python\",\n    \"keyword2\": \"java\",\n    \"start\": \"01-01-2019\",\n    \"end\": \"07-01-2019\",\n    \"country\": \"gb\"\n}"
headers = {
  'Content-Type': 'text/plain'
}

response = requests.request("POST", url, headers=headers, data = payload)

print(response.text.encode('utf8'))

**更新2:我仍在尝试解决问题,我想即使从Python函数获得200响应,我的代码也有问题,但不确定是什么。我在邮递员中再次尝试过,邮递员正在保存我的csv **

2 个答案:

答案 0 :(得分:1)

尝试删除“?”在网址末尾。

url = "https://gtrendsv4-f2ya73vqjq-uc.a.run.app/request_trends"

params = {
    "keyword1": "run",
    "keyword2": "sun",
    "start": "2019-02-01",
    "end": "2019-02-12",
    "country": "FR"
}

r = requests.post(url, params = params)

print(r.content)

答案 1 :(得分:1)

如果您的请求适用于邮递员,则可以尝试从邮递员界面将其导出到python:

enter image description here

然后选择“ Python”并尝试代码。

这就是我得到的:

import requests

url = "https://gtrendsv4-f2ya73vqjq-uc.a.run.app/request_trends?keyword1=run&keyword2=sun&start=2019-02-01&end=2019-02-12&country=FR"

payload = {}
headers= {}

response = requests.request("POST", url, headers=headers, data = payload)

print(response.text.encode('utf8'))
print(response.status_code)

编辑:

您可以使用urllib从有效载荷字典中使用编码后的参数创建url:

import urllib

url = "https://gtrendsv4-f2ya73vqjq-uc.a.run.app/request_trends?"

payload = {
    "keyword1": "keyword_1",
    "keyword2": "keyword_2",
    "start": "start",
    "end": "end",
    "country": "country"
}

parameters = urllib.parse.urlencode(payload)
url += parameters
相关问题