клиенту Twitter javascript qml oauth 401 не удалось проверить подпись и токен

#javascript #twitter #oauth #qml

#javascript #Twitter #oauth #qml

Вопрос:

Я пытаюсь закодировать клиент Twitter на основе javascript-qml. Я использую библиотеку javascript oauth, рекомендованную twitter dev page и размещенную в Google code. (http://oauth.googlecode.com/svn/code / javascript/) Я пытался получить токен запроса из Twitter, выполнив то, что указано на странице разработки twiter, затем проанализировав пример библиотеки oauth (исходный код, заголовок http и wireshark), но у меня всегда получался сбой «401 — не удалось проверить подпись и токен oauth». Я пробовал много разных способов сделать это, изменяя порядок параметров перед базовой строкой и подписывая ее, публикуя параметры get, устанавливая данные заголовка «Authorization» и т.д. И т.п., Но каждый раз это приводило к сбою. Вероятно, я делаю что-то глупое и неправильное, но я просто не вижу, где. Вот мой код :

 function getSignature() {
var accessor = { consumerSecret: consumer_secret,
    tokenSecret: oauth_token_secret
};
var message = { method: "POST",
    action: request_token_url,
    parameters: []
};
message.parameters.push(["oauth_callback", OAuth.formEncode(oauth_callback)]);
message.parameters.push(["oauth_consumer_key", consumer_key]);
message.parameters.push(["oauth_nonce", OAuth.nonce(10)]);
message.parameters.push(["oauth_signature_method", signature_method]);
message.parameters.push(["oauth_timestamp", OAuth.timestamp()]);
OAuth.completeRequest(message, accessor);
OAuth.SignatureMethod.sign(message, accessor);
console.log(OAuth.getParameter(message.parameters, "oauth_signature"));
var data = "OAuth oauth_consumer_key=" consumer_key "amp;oauth_signature_method=" signature_method "amp;oauth_callback=" OAuth.getParameter(message.parameters, "oauth_callback")
     "amp;oauth_timestamp=" OAuth.getParameter(message.parameters, "oauth_timestamp") "amp;oauth_nonce=" OAuth.getParameter(message.parameters, "oauth_nonce") "amp;oauth_signature=" OAuth.getParameter(message.parameters, "oauth_signature");
console.log(data);
request_maker = new XMLHttpRequest();
request_maker.open("POST", request_token_url);
request_maker.setRequestHeader("Authorization", data);
request_maker.onreadystatechange = oth_func;
request_maker.send();
  

}

Если кто-нибудь может мне помочь! Это было бы облегчением! Спасибо

Комментарии:

1. Черт возьми, я сталкивался с этой проблемой, когда мои параметры URL не были закодированы в процентах, и это может относиться и к данным заголовка, таким как ключ потребителя. Если для вас это альтернатива, вы могли бы попробовать библиотеку Qt kQOAuth, в которой есть рабочий пример Twitter.

Ответ №1:

гаэтан, поскольку вы получаете ошибку 401, которая звучит так, как будто вы делаете что-то неправильно с точки зрения Twitter API или, возможно, даже что-то с Java Script, поэтому я полагаю, что это вряд ли связано с QML. Но что я могу порекомендовать, так это взглянуть на клиент QML Twitter, который вы можете найти в вашем директоре исходного кода qt в demos / declarative / twitter. Возможно, это может вам помочь.

Комментарии:

1. Барбарис, к сожалению, пример, приведенный в демонстрационных версиях qml, касается только поиска и не показывает, как реализовать протокол oauth. Я предполагаю, что моя ошибка в подписи oauth или в том, как я вызываю API Twitter, но я просто не могу найти, где.

Ответ №2:

У меня возникла эта ошибка, потому что время на моей целевой (виртуальной) машине на неделю отличалось от фактического времени. Когда я обновил время, проблема исчезла.