【问题标题】:"Headers rejected by Twitter" when uploading media to Twitpic with TweetSharp/Hammock使用 TweetSharp/Hammock 将媒体上传到 Twitpic 时出现“标题被 Twitter 拒绝”
【发布时间】:2011-12-24 17:03:22
【问题描述】:

我正在尝试使用 WP7 应用程序中的 TweetSharp 和 Hammock 库将图片上传到 Twitpic。上传照片的代码是这样的:

// Clients.srv is a TweetSharp TwitterClient
RestRequest req = Clients.srv.PrepareEchoRequest();
RestClient client = new RestClient { Authority = "http://api.twitpic.com/", VersionPath = "2" };

req.AddFile("media", e.OriginalFileName, e.ChosenPhoto);
req.AddField("key", "hidden");
req.AddField("message", Tweet.Text);
req.Path = "upload.xml";
req.Method = Hammock.Web.WebMethod.Post; 

client.BeginRequest(req, (RestCallback) uploadCompleted);

对代码的一些解释:这来自对 photoPickerTask 的调用,e 是包含照片名称和文件(一个 IO.Stream 对象)的事件参数。所有这些都经过验证可以正常工作。

问题在于 Twitpic 的响应始终是“无法验证您的身份:标头被 Twitter 拒绝”。 TwitterClient 工作正常,OAuth 令牌没问题。 API 密钥是正确的。我不知道错误是来自我的代码、来自 TweetSharp PrepareEchoRequest() 函数还是来自 Twitpic。谁能给我一个线索?

【问题讨论】:

  • 虽然它是针对 PHP 的,但这里有一个解决方案可能对 shkspr.mobi/blog/?p=2084 有帮助
  • @keyboardP,是的,我在寻找解决方案时发现了这一点。但这对我不起作用。
  • @DerekBeattie,我不能,我正在 WP7 设备上调试应用程序(不能使用模拟器,它没有图片中心)。

标签: c# windows-phone-7 oauth tweetsharp twitpic


【解决方案1】:

我今天遇到同样(和类似)的麻烦太多小时了。我终于通过将版本路径更改为 1 并将所有令牌输入到请求中来使其工作(如 twitpic doco 中所述)。我以为我昨天尝试了这个确切的组合,但它现在正在工作,所以手指交叉的 api 在此期间没有更新。

    TwitterService service = new TwitterService(consumerKey, consumerSecret);
    service.AuthenticateWith(accessToken, accessTokenSecret);

    if (thumbnail != null)  // an image post - go through twitpic
    {
        MemoryStream ms = new MemoryStream();
        thumbnail.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        ms.Seek(0, SeekOrigin.Begin);

        // Prepare an OAuth Echo request to TwitPic
        RestRequest request = service.PrepareEchoRequest();
        request.Path = "uploadAndPost.xml";
        request.AddField("key", twitpicApiKey);
        request.AddField("consumer_token", consumerKey);
        request.AddField("consumer_secret", consumerSecret);
        request.AddField("oauth_token", accessToken);
        request.AddField("oauth_secret", accessTokenSecret);
        request.AddField("message", "Failwhale!");
        request.AddFile("media", "failwhale" + Environment.TickCount.ToString(), ms, "image/jpeg");

        // Post photo to TwitPic with Hammock
        RestClient client = new RestClient { Authority = "http://api.twitpic.com/", VersionPath = "1" };
        RestResponse response = client.Request(request);

        return response.Content;
    }

【讨论】:

  • 我稍后会试试这个,我会告诉你,但似乎它会工作,谢谢 :) 只是一个问题,Environment.TickCount.ToString() 是什么意思?
  • 看这个(即将启动相同的代码)将所有密码发送到twitpic似乎不太明智?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 2019-09-25
  • 1970-01-01
  • 2022-08-02
相关资源
最近更新 更多