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

2024-10-04 03:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个Python脚本来调用https://gtrendsv4-f2ya73vqjq-uc.a.run.app/request_trends上可用的API。我的问题是API应该生成一个CSV文件并将其存储在我的GCP上。该API采用5 string parameters:keyword1keyword2startendcountry。当我使用POSTMAN测试API时,我得到了一个200响应代码,并且csv文件被正确地生成和存储。这是我在邮递员中的url: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**


Tags: csvrun代码httpsurlnewrequestposition
2条回答

请尝试删除url末尾的“?”

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)

如果您的请求在postman中有效,则可以尝试从postman接口将其导出到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从有效负载dict中的编码参数创建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

相关问题 更多 >