繁体   English   中英

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

[英]how to send custom get HTTP request using c#?

我想发送这样的请求

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());

如果您希望使用API​​来更好地控制通过网络发送的数据,则可以进一步调整袖扣,然后改为使用TcpClient

就是说,这不是我所建议的-正如我在上面的评论中提到的那样, 那里有.Net OAuth库 我在OAuth方面的经验充其量是通过(但足以自信地说“如果您解决此问题,您将遇到另一个问题”),但是除非您的产品本身是OAuth库,否则我就没有想一想为什么不使用别人的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM