簡體   English   中英

Python POST 請求返回代碼 200 但不存儲文件

[英]Python POST request return code 200 but not storing the file

我編寫了一個 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"url = "https://gtrendsv4-f2ya73vqjq-uc.a.run.app/request_trends?keyword1=run&keyword2=sun&start=2019-02-01&end=2019-02-12&country=FR"

當我將 Python 代碼用於同一服務上的相同 POST 請求時,它也會返回 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

更新(從 Postman 導出中截取的代碼):

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 響應,我的代碼中有一些錯誤,但不確定是什么。 我在 Postman 中再次嘗試,Postman 正在保存我的 csv **

嘗試刪除“?” 在網址的末尾。

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)

如果您的請求在郵遞員中有效,您可以嘗試從郵遞員界面將其導出到 python:

在此處輸入圖片說明

然后選擇“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 從您的有效負載字典中創建帶有編碼參數的網址:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM