[英]Why did I get return code 200 instead of 201 on my post request ? (Python /Requests/Json)
[英]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 parameters
: keyword1
、 keyword2
、 start
、 end
和country
。 當我使用 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.