"Заголовки отклонены Twitter" при загрузке мультимедиа в Twitpic с помощью TweetSharp/Hammock
Я пытаюсь загрузить изображение в Twitpic, используя библиотеки TweetSharp и Hammock в приложении WP7. Кусок кода, который загружает фотографию:
// 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. Кто-нибудь может дать мне подсказку?
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;
}