如何将数组编码为http get参数?
How to encode an array as a http get parameter?
我的目标是发送一个 API 请求,其中包含一个数组作为参数值。请求-URL 是 https://api.twitter.com/2/tweets/search/recent?max_results=100&tweet.fields=lang,created_at&query=%23test
。当我使用 URL 作为字符串时,它起作用了。
但是,由于使用参数字典更方便,我想使用语法 response = requests.request('GET', url, headers=header, params=params)
,因为它允许我在单个对象中设置所有参数。
为此,我的参数字典如下所示。
params = {
"max_results": 100,
"tweet.fields": ["lang","created_at"],
"query": "%23test"
}
这里的问题是结果URL https://api.twitter.com/2/tweets/search/recent?max_results=100&tweet.fields=lang&tweet.fields=created_at&query=%23test
.
此 URL 将不起作用,因为 tweet.fields
是使用 tweet.fields=lang&tweet.fields=created_at
编码的,违反了 Twitter 的重复参数策略。
'{"errors":[{"parameters":{"tweet.fields":["lang","created_at"]},"message":"Duplicate parameters are not allowed: the `tweet.fields` query parameter"}],"title":"Invalid Request","detail":"One or more parameters to your request was invalid.","type":"https://api.twitter.com/2/problems/invalid-request"}'
另一个想法是将参数更改为 "tweet.fields": {"lang","created_at"},
,这会导致与其他参数字典相同的 URL。
如何在继续使用参数字典的同时将参数编码为 tweet.fields=lang,created_at
而不是 tweet.fields=lang&tweet.fields=created_at
?
如果您需要像 lang, created_at
这样的字符串,那么只需将其放在那里即可。
params = {
"max_results": 100,
"tweet.fields": "lang,created_at",
"query": "%23test"
}
您也可以使用.join
方法自动生成一个。
params = {
"max_results": 100,
"tweet.fields": ",".join(["lang", "created_at"]) ,
"query": "%23test"
}
我的目标是发送一个 API 请求,其中包含一个数组作为参数值。请求-URL 是 https://api.twitter.com/2/tweets/search/recent?max_results=100&tweet.fields=lang,created_at&query=%23test
。当我使用 URL 作为字符串时,它起作用了。
但是,由于使用参数字典更方便,我想使用语法 response = requests.request('GET', url, headers=header, params=params)
,因为它允许我在单个对象中设置所有参数。
为此,我的参数字典如下所示。
params = {
"max_results": 100,
"tweet.fields": ["lang","created_at"],
"query": "%23test"
}
这里的问题是结果URL https://api.twitter.com/2/tweets/search/recent?max_results=100&tweet.fields=lang&tweet.fields=created_at&query=%23test
.
此 URL 将不起作用,因为 tweet.fields
是使用 tweet.fields=lang&tweet.fields=created_at
编码的,违反了 Twitter 的重复参数策略。
'{"errors":[{"parameters":{"tweet.fields":["lang","created_at"]},"message":"Duplicate parameters are not allowed: the `tweet.fields` query parameter"}],"title":"Invalid Request","detail":"One or more parameters to your request was invalid.","type":"https://api.twitter.com/2/problems/invalid-request"}'
另一个想法是将参数更改为 "tweet.fields": {"lang","created_at"},
,这会导致与其他参数字典相同的 URL。
如何在继续使用参数字典的同时将参数编码为 tweet.fields=lang,created_at
而不是 tweet.fields=lang&tweet.fields=created_at
?
如果您需要像 lang, created_at
这样的字符串,那么只需将其放在那里即可。
params = {
"max_results": 100,
"tweet.fields": "lang,created_at",
"query": "%23test"
}
您也可以使用.join
方法自动生成一个。
params = {
"max_results": 100,
"tweet.fields": ",".join(["lang", "created_at"]) ,
"query": "%23test"
}