2016-07-04 9 views
0

ich Axios bin mit einer POST-Anfrage an die API Instagram senden:POST-Objekt-API, aber API kann es nicht lesen

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 
axios.post('https://api.instagram.com/oauth/access_token', { 
    client_id: 'zzz', 
    client_secret: 'zzz', 
    grant_type: 'authorization_code', 
    redirect_uri: 'http://localhost:8080/oauth2', 
    code: 'zzz', 
    }).then(function(res) { 
    console.log("response ", res); 
    }) 
    .catch(function(err) { 
    console.log("err ", err); 
    }); 

Dieses Beispiel der Instagram API-Dokumentation (https://www.instagram.com/developer/authentication/) gegeben folgt :

// curl -F 'client_id=CLIENT_ID' \ 
    // -F 'client_secret=CLIENT_SECRET' \ 
    // -F 'grant_type=authorization_code' \ 
    // -F 'redirect_uri=AUTHORIZATION_REDIRECT_URI' \ 
    // -F 'code=CODE' \ 
    // https://api.instagram.com/oauth/access_token 

wird jedoch der folgende Fehler zurückgegeben:

data: { 
    code: 400, 
    error_type: 'OAuthException', 
    error_message: 'You must provide a client_id' 
} 

Wenn ich Chrome Postman verwenden, ich habe kein Problem; Ich erhalte ein Autorisierungs-Token. Also offensichtlich liest die API nicht, was ich sende, aber ich kann nicht herausfinden warum. Ich habe meinen Header gesetzt:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

app.use(function(req, res, next) { 
    res.setHeader('Access-Control-Allow-Origin', '*'); 
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, content-type, accept, authorization'); 
    res.setHeader('Access-Control-Allow-Credentials', true); 
    next(); 
}); 

Auch ich habe sogar die gleichen POST http://jsonplaceholder.typicode.com/ und wie erwartet, erhalte ich die richtige Antwort.

Irgendwelche Ideen, was ich falsch machen könnte?

EDIT:

Ich habe gerade bemerkt, dass, wenn ich Chrome Postman verwenden, ist es nur mit der x-www-form-urlencoded Einstellung funktioniert. Ich habe versucht, es mit JSON und einer Reihe von anderen Möglichkeiten zu senden, aber ich erhalte den gleichen Fehler wie unten angegeben.

+0

verwenden ** application/json ** anstelle von ** application/x-www-form-urlencoded **? – TommyLike

+0

Versuchte das und es hat nicht funktioniert. – jro

+0

Anwendung/x-www-Form-urlencoded wird zum Senden von Formulardaten verwendet. Nur durch einen kurzen Blick auf Instagram-API möchten Sie Abfrage String senden - Hinzufügen von Parametern zu tatsächlichen URL dh. https: //api.instagram.com/oauth/access_token? client_id = zzz & client_secret = zzz ... – razakj

Antwort

0

Sie können den folgenden Code verwenden, um eine application/x-www-form-urlencoded Anfrage über axios von einer node.js Anwendung zu machen:

var querystring = require('querystring'); 

axios.post('http://something.com/foo', querystring.stringify({ 
    'bar': 123 
}); 

Bitte beachten Sie, dass Sie die Content-Type Header nicht festlegen müssen. Es wird automatisch auf application/x-www-form-urlencoded gesetzt.

Verwandte Themen