我写了一个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"
当我在同一服务上对同一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 **
答案 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:
然后选择“ 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