# Authentication ## OAuth ### OAuth1.0 Refresh Token - http://oauth.googlecode.com/svn/spec/ext/session/1.0/drafts/1/spec.html#anchor4 - https://developer.yahoo.com/oauth/guide/oauth-refreshaccesstoken.html ```js request.post('https://api.login.yahoo.com/oauth/v2/get_token', { oauth: { consumer_key: '...', consumer_secret: '...', token: '...', token_secret: '...', session_handle: '...' } }, function (err, res, body) { var result = require('querystring').parse(body) // assert.equal(typeof result, 'object') }) ``` ### OAuth2 Refresh Token - https://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-6 ```js request.post('https://accounts.google.com/o/oauth2/token', { form: { grant_type: 'refresh_token', client_id: '...', client_secret: '...', refresh_token: '...' }, json: true }, function (err, res, body) { // assert.equal(typeof body, 'object') }) ``` # Multipart ## multipart/form-data ### Flickr Image Upload - https://www.flickr.com/services/api/upload.api.html ```js request.post('https://up.flickr.com/services/upload', { oauth: { consumer_key: '...', consumer_secret: '...', token: '...', token_secret: '...' }, // all meta data should be included here for proper signing qs: { title: 'My cat is awesome', description: 'Sent on ' + new Date(), is_public: 1 }, // again the same meta data + the actual photo formData: { title: 'My cat is awesome', description: 'Sent on ' + new Date(), is_public: 1, photo:fs.createReadStream('cat.png') }, json: true }, function (err, res, body) { // assert.equal(typeof body, 'object') }) ``` # Streams ## `POST` data Use Request as a Writable stream to easily `POST` Readable streams (like files, other HTTP requests, or otherwise). TL;DR: Pipe a Readable Stream onto Request via: ``` READABLE.pipe(request.post(URL)); ``` A more detailed example: ```js var fs = require('fs') , path = require('path') , http = require('http') , request = require('request') , TMP_FILE_PATH = path.join(path.sep, 'tmp', 'foo') ; // write a temporary file: fs.writeFileSync(TMP_FILE_PATH, 'foo bar baz quk\n'); http.createServer(function(req, res) { console.log('the server is receiving data!\n'); req .on('end', res.end.bind(res)) .pipe(process.stdout) ; }).listen(3000).unref(); fs.createReadStream(TMP_FILE_PATH) .pipe(request.post('http://127.0.0.1:3000')) ; ```