0

J'ai essayé d'utiliser Twitter API pour publier un tweet en utilisant Javascript. Détails ci-dessousTwitter API Erreur: 'erreur interne du serveur'

Base de cordes

POST&http%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&oauth_consumer_key%3DXXXXXXXXXXX%26oauth_nonce%3D9acc2f75c97622d1d2b4c4fb4124632b1273b0e0%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1305227053%26oauth_token%3D159970118-XXXXXXXXXXXXXXXXXXXXXXX%26oauth_version%3D1.0%26status%3DHello

tête

OAuth oauth_nonce="9acc2f75c97622d1d2b4c4fb4124632b1273b0e0", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1305227053", oauth_consumer_key="XXXXXXXXXXXXXXXXX", oauth_token="159970118-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", oauth_signature="IWuyoPJBrfY03Hg5QJhDRtPoaDs%3D", oauth_version="1.0"

J'utilise la méthode POST avec le corps "status = Bonjour"

mais je reçois une erreur interne du serveur. Y a-t-il une erreur de mon côté? Merci d'avance.

code Javascript utilisé

h est l'en-tête donnée ci-dessus

Tweet = "Bonjour"

encodeURLall est défini par l'utilisateur qui travaille dans toutes les autres occasions.

var xhr = new XMLHttpRequest(); 
xhr.open("POST","http://api.twitter.com/1/statuses/update.json", false); 
xhr.setRequestHeader("Authorization",h); 

xhr.onreadystatechange = function() { 

    if (xhr.readyState == 4) 
    { 
     console.log("STATUS="+xhr.status); 
     console.log("RESPONSE="+xhr.responseText); 
    } 
} 

xhr.send("status="+encodeURLall(tweet)); 

} 
+0

Êtes-vous en train de POSTER à partir du navigateur? ou est-ce que le code côté serveur fait le post? – jimbojw

+0

Pouvez-vous nous montrer le code que vous utilisez? –

+0

@jimbojw Je poste uniquement à partir du navigateur. – Ram

Répondre

0

Vous ne pouvez pas accéder au site de Twitter en utilisant un XMLHttpRequest, en raison de Same origin policy. Utilisez JSONP à la place ou un proxy côté serveur (appelez votre propre serveur qui redirige votre demande vers Twitter).

BTW, que fait encodeURLall()? Ne devriez-vous pas simplement utiliser encodeURIComponent?


Mise à jour: Pour citer Google:

Regular web pages can use the XMLHttpRequest object to send and receive data from remote servers, but they're limited by the same origin policy . Extensions aren't so limited. An extension can talk to remote servers outside of its origin, as long as it first requests cross-origin permissions.

S'il vous plaît lire là-bas pour voir les paramètres que vous devez changer afin de faire ce travail.

+0

Alors je devrais faire comme ceci '.ajax de $ ({ \t \t \t \t \t 'url': 'http://api.twitter.com/1/statuses/update.json', \t \t \t \t \t 'data': {status: encodeURLall (Tweet)}, \t \t \t \t \t 'type': 'post', \t \t \t \t \t 'succès': onUpdateCallback, \t \t \t \t \t 'dataType': 'jsonp' \t \t \t \t}); 'mais comment pourrais-je mettre en-tête pour la demande. – Ram

+0

Btw je suis en train de créer une extension Google Chrome. Je veux juste vous donner une idée claire de ce que je fais. Alors n'est-il pas possible de définir les en-têtes dans jsonp ??? – Ram

+0

@Ram: dans une extension Chrome, cela peut être différent. –