我正在为 Rust 开发 Twitter API,并且在将参数传递给我的 GET 请求时遇到了问题。我用于请求的代码如下所示。data_body
类似于“screen_name=a_user”,授权标头是 Twitter 所需的 OAuth 授权(这不是问题,因为它正在处理我的所有其他请求)。
let mut res = client.get("http://httpbin.org/get")
.body(&data_body[..])
.header(Authorization(authorization_header))
.header(ContentType::form_url_encoded())
.send().unwrap();
我开始将它发送到 httpbin.org,这样我就可以看到原始请求。我得到的结果如下所示。
{
"args": {},
"headers": {
"Authorization": "OAuth oauth_consumer_key=\"\", oauth_nonce=\"RH9vZYMCbAtfQAuVh44fhlyGQfQqBCPq\", oauth_signature=\"dTbOyaURct0auVlC%2B8Y7vDFpus0%3D\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"1452648640\", oauth_token=\"\", oauth_version=\"1.0\"",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org"
},
"origin": "0.0.0.0",
"url": "http://httpbin.org/get"
}
Twitter api 文档给出的 curl 请求在下面有一个 GET 请求的数据部分(我已经用空字符串替换了我的键)。我可以确认这适用于 GET。
curl --get 'https://api.twitter.com/1.1/users/show.json' --data 'screen_name=twitterdev' --header 'Authorization: OAuth oauth_consumer_key="", oauth_nonce="6a37886cb38b2f5e12dee8fd47aa097c", oauth_signature="zhXDA5JbKRmw2xbJcEqK9sxuu5E%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1452647580", oauth_token="", oauth_version="1.0"' --verbose
我ContentType
从 Hyper API 中尝试了一堆不同的 s,但无法填充 HTTP 请求的 args 部分。我认为这就是问题所在,但我对 HTTP 没有太多经验,所以我很可能是错的。最终,请求返回一个 403(未经授权),这是由缺少的参数触发的。我知道我的 OAuth 标头正在正确生成,因为它正在处理所有 POST 请求,并且当我从 curl 命令复制随机数和时间戳时,我从 Twitter API 获得签名匹配。