如何使用 C# 发送自定义获取 HTTP 请求

本文关键字:获取 HTTP 请求 自定义 何使用 | 更新日期: 2023-09-27 18:36:53

我想发送这样的请求

GET /v1/contacts?sid=msgrsessionid
Authorization: OAuth
realm="yahooapis.com",
oauth_consumer_key="dj0yJmk9nM9Y29uc3VtZXJzZWNyZXQmeD1lMg--",
oauth_nonce="24829.2331",
oauth_signature_method="PLAINTEXT",
oauth_timestamp="1219450170",
oauth_token="A%3DuqkiebGpiTJl7ThQxU.jDXXaETYyfEy3xAKPyoavokwOOcZcz8Xs_l1Nvnl._KmCEVCeLkxxT1Y6BgRqf5f98sQWHklBM_anetveR7okK_M_5XEmQ1_1reo3UgKQULT_dQT8Gao3rgz5rJxgmnYrhdWWdfgTdMQVzpbJT2aGkz59NTK1O8yXVE1EvZUCqju7WiFYu.WHNEw.9TWq3g--",
oauth_version="1.0",
oauth_signature="O2AQipLITO0aYHKZc9266RzC94%260af0ef7f79bfb89dd6af87589e4c97b022f594a3"  

正在使用下面的代码,但是我收到未经授权的访问(401)异常,这里出了什么问题以及如何将上述原始请求作为字符串发送(就像我们对telnet所做的那样)而不是构造为WebRequest。

Uri address = new Uri("https://api.login.yahoo.com/oauth/v2/get_token");
WebRequest request = WebRequest.Create(address);
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
StringBuilder authHeader = new StringBuilder();
authHeader.Append("Authorization: OAuth ");
authHeader.Append("realm='"yahooapis.com'", ");
authHeader.Append("oauth_consumer_key='""+consumerKey+"'", ");
authHeader.Append("oauth_nonce='""+random+"'", ");
authHeader.Append("oauth_signature_method='"PLAINTEXT'", ");
authHeader.Append("oauth_timestamp='""+UnixTimeNow().ToString()+"'", ");
authHeader.Append("oauth_token='""+requestToken.Trim()+"'", ");
authHeader.Append("oauth_version='"1.0'", ");            
authHeader.Append("oauth_signature='""+HttpUtility.UrlEncode(consumerKey+"&"+consumersecret)+"'"");
request.Headers.Add(authHeader.ToString());

如何使用 C# 发送自定义获取 HTTP 请求

如果你想要一个 API 来让你更好地控制通过网络发送的数据,你可以把袖子卷得更远一点,改用 TcpClient。

也就是说,这不是我推荐的 - 正如我在上面的评论中提到的,那里有.Net OAuth库。 我对OAuth的经验充其量只是通过(但足以自信地说"如果你解决了这个问题,你会遇到另一个和另一个"),但除非你的产品本身就是OAuth库,否则我不知道你为什么不使用别人的。