求教关于豆瓣接口saying 要求使用的http header传参,求示例。

majiorxiu 2012-05-24 01:56:06
先声明~ 获取的accesstoken 是对的 签名方法也是对的,因为我使用该accesstoken 和签名方法可以获取到 用户信息 当然是用get请求, 那么根据官网文档说明
“如果你发现豆瓣提示你没有传递OAuth参数(no auth错误),那么请检查一下你是否在POST、PUT、DELETE请求中使用了url或post form传递OAuth参数。 ”
本人测试返回 403 容错后获取提示no auth access error,
呈上代码 ,求批评求教育

public string getHeader(string accesstoken)
{
Uri uri = new Uri(saying);
string nonce = GenerateNonce();
string timeStamp = GenerateTimeStamp();
string normalizeUrl, normalizedRequestParameters;
string sig = GenerateSignature(uri, AppKey, AppKeySecret, accesstoken, AccessTokenSecret, "POST", timeStamp, nonce, out normalizeUrl, out normalizedRequestParameters, true);
sig = UrlEncode(sig);
//构造OAuth头部
StringBuilder oauthHeader = new StringBuilder();
oauthHeader.AppendFormat(":OAuth realm=\"http://sp.example.com/\",oauth_consumer_key={0},", AppKey);
oauthHeader.AppendFormat("oauth_token={0},", accesstoken);
oauthHeader.AppendFormat("oauth_signature_method={0},", "HMAC-SHA1");
oauthHeader.AppendFormat("oauth_signature={0},", sig);
oauthHeader.AppendFormat("oauth_timestamp={0},", timeStamp);
oauthHeader.AppendFormat("oauth_nonce={0},", nonce);
oauthHeader.AppendFormat("oauth_version={0}", "1.0");
return oauthHeader.ToString();
}

public string AddSaying(string context,string accesstoken,DataType type)
{
string oauthHeader = getHeader(accesstoken);
//构造请求
StringBuilder requestBody = new StringBuilder("<?xml version='1.0' encoding='UTF-8'?>");
requestBody.Append("<entry xmlns:ns0=\"http://www.w3.org/2005/Atom\" xmlns:db=\"http://www.douban.com/xmlns/\">"); requestBody.Append("<content>C# OAuth</content>");
requestBody.Append("</entry>");
Encoding encoding = Encoding.GetEncoding("UTF-8");
byte[] data = encoding.GetBytes(requestBody.ToString());
// Http Request的设置
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(saying));
request.Headers.Set("Authorization", oauthHeader);
request.ContentType = "application/atom+xml";
request.Method = "POST";
request.ContentLength = data.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8); string responseBody = stream.ReadToEnd();
stream.Close();
response.Close();
return("发送广播成功");

}
catch (WebException e)
{
StreamReader stream = new StreamReader(e.Response.GetResponseStream(), System.Text.Encoding.UTF8);
string responseBody = stream.ReadToEnd();
stream.Close();
return "发送广播失败,原因: " + responseBody;
}
}

新手,分不多,昨天蹭了两个帖子 才弄的20 ,望谅解
...全文
173 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧