0

这有效:

    $.post( 
        'http://api.imgur.com/2/upload.json', 
        { 
            key: 'dsfdwerwersf53534dfsfse3', 
            image: 'http://i.imgur.com/UH17u.png' 
        }, 
        function( data ) { console.log( data.upload.links.original ); }
    );

当我在 Chrome 的控制台中运行它时,imgur 会立即向我发送上传图片的 url http://i.imgur.com/KrHMY.png:. 出色的。

.

现在我正在使用 node.js 在服务器端尝试同样的事情,但它不起作用:

    var 
        express = require( 'express' )
    ,   app = express.createServer()
    ,   request = require( 'superagent' );


    app.get( '/', function( req, res ) {
        request
            .post( 'http://api.imgur.com/2/upload.json' )
            .send( { key: 'dsfdwerwersf53534dfsfse3', image: 'http://i.imgur.com/UH17u.png' } )
            .end( function( data ) {
                console.log( data.upload.links.original );
            });
    });

    app.listen( '8080' );

当我运行 node.js 应用程序时,imgur 会发回这个响应:

text: '{"error":{"message":"No API key was sent, and no user is authenticated","request":"\\/2\\/upload.json","method":"post","format":"json","parameters":"image = {\\"key\\":\\"dsfdwerwersf53534dfsfse3\\",\\"image\\":\\"http:\\/\\/i.imgur.com\\/UH17u.png\\"}"}}',

关键部分是这样的:No API key was sent。为什么 imgur 无法识别key我正在发送的POST

我试过同时使用requestsuperagent模块。我觉得很傻,无法弄清楚为什么这么简单的事情不起作用。感谢任何指针。

4

1 回答 1

5

jQuery 有时会做很多神奇的事情,以至于很难看到它。

在这里我也打赌两件事,我一个月没有使用超级代理,而且我犯了像这样的愚蠢错误,这让我很难过。

但在这里我敢打赌,body 最多是一个 json 或你的对象。JQuery 默认 urlencode 就像大多数 API 希望 POST 正文一样。利用

var = require('querystring');
/*...*/
.send(qs.encode({ key: '...', image: '...' }))
于 2012-08-07T16:13:50.910 回答