标签: node-request

将JSON传递给HTTP POST请求

我正在尝试使用nodejs请求 [2] 向谷歌QPX Express API [1]发出HTTP POST请求.

我的代码如下:

    // create http request client to consume the QPX API
    var request = require("request")

    // JSON to be passed to the QPX Express API
    var requestData = {
        "request": {
            "slice": [
                {
                    "origin": "ZRH",
                    "destination": "DUS",
                    "date": "2014-12-02"
                }
            ],
            "passengers": {
                "adultCount": 1,
                "infantInLapCount": 0,
                "infantInSeatCount": 0,
                "childCount": 0,
                "seniorCount": 0
            },
            "solutions": 2,
            "refundable": false
        }
    }

    // QPX REST API URL (I censored my api …
Run Code Online (Sandbox Code Playgroud)

json curl node.js express node-request

84
推荐指数
4
解决办法
20万
查看次数

如何从node.js中的请求模块获取cookie?

function getCookies(){

    request('http://google.com', function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(response.headers);
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

结果

{ date: 'Fri, 11 Dec 2015 07:15:50 GMT',
  expires: '-1',
  'cache-control': 'private, max-age=0',
  'content-type': 'text/html; charset=EUC-KR',
  p3p: 'CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."',
  server: 'gws',
  'x-xss-protection': '1; mode=block',
  'x-frame-options': 'SAMEORIGIN',
  'set-cookie': 
   [ 'PREF=ID=1111111111111111:FF=0:TM=1449818150:LM=1449818150:V=1:S=Q3BB20FA6TkaZymd; expires=Thu, 31-Dec-2015 16:02:17 GMT; path=/; domain=.google.co.kr',
     'NID=74=hnriWxk7N9jHtP5W0qgaxrwD1YuNKOmJg748ucxWilu9jaqHJVovfkYdvMr0tlp-VToID5cdTNDSXNXqr4M8umJ9traab67x2xZKfu3hJbsBRXeVvyiCOcwZ8bkXNcU4; expires=Sat, 11-Jun-2016 07:15:50 GMT; path=/; domain=.google.co.kr; HttpOnly' ],
  'accept-ranges': 'none',
  vary: 'Accept-Encoding',
  connection: 'close' } …
Run Code Online (Sandbox Code Playgroud)

cookies node.js node-request

17
推荐指数
3
解决办法
4万
查看次数

Node.js获取请求ETIMEDOUT和ESOCKETTIMEDOUT

我使用Node.js的-异步及请求模块抓取100+百万计的网站,我不断碰到的错误ESOCKETTIMEDOUTETIMEDOUT几分钟后.

重新启动脚本后它再次起作用.它似乎不是连接限制问题,因为我仍然可以执行resolve4,resolveNs,resolveMx,也curl没有延迟.

你看到代码有什么问题吗?或任何建议?我想把async.queue()并发推高到至少1000.谢谢.

var request = require('request'),
    async = require('async'),
    mysql = require('mysql'),
    dns = require('dns'),
    url = require('url'),
    cheerio = require('cheerio'),
    iconv = require('iconv-lite'),
    charset = require('charset'),
    config = require('./spy.config'),
    pool = mysql.createPool(config.db);

iconv.skipDecodeWarning = true;

var queue = async.queue(function (task, cb) {
    dns.resolve4('www.' + task.domain, function (err, addresses) {
        if (err) {
            //
            // Do something
            //
            setImmediate(function () {
                cb()
            });
        } else {
            request({
                url: 'http://www.' + task.domain,
                method: 'GET', …
Run Code Online (Sandbox Code Playgroud)

javascript node.js node-request

15
推荐指数
2
解决办法
2万
查看次数

无法拨打reddit的/ api/submit

我无法在reddit/r/redditdev上得到任何帮助,所以我希望你在stackoverflow的好人可以帮助

我正打算打电话给/ api/submit.

  1. 我可以成功登录用户并检索承载/访问令牌.(我使用passport-reddit节点模块)
  2. 我可以成功调用/ api/needs_captcha
  3. 当/ needs_captcha返回true时,我可以成功调用/ api/new_captcha
  4. 我可以向用户显示验证码图像
  5. 现在我尝试使用nodejs的请求模块调用提交

    var options = {
      url: 'https://oauth.reddit.com/api/submit',
      method: 'POST',
      headers: {
          'Authorization': 'bearer '+usertoken
        , 'user-agent': 'node.js'
      },
      json: data
    } 
    request(options, function(error, response, body) ...
    
    Run Code Online (Sandbox Code Playgroud)

我的"数据"变量的示例如下所示:

{ api_type: 'json',
  kind: 'self',
  sr: 'test',
  title: 'more test',
  text: 'hello world',
  iden: 'o6NsDh4IMCDb2To2DeUXJAgEPkB4O7uS',
  captcha: 'WZRTBL' }
Run Code Online (Sandbox Code Playgroud)

但我得到了回报:

{
  "jquery":[
    [0,  1,  "call", ["body"]],
    [1,  2,  "attr", "find"],
    [2,  3,  "call", [".status"]],
    [3,  4,  "attr", "hide"],
    [4,  5,  "call", []], …
Run Code Online (Sandbox Code Playgroud)

reddit node.js node-request

15
推荐指数
1
解决办法
787
查看次数

尝试从componentWillMount中的异步调用返回时调用setState时未定义document

我在我的组件的componentWillMount调用中抓取了我的数据[实际上它是在mixin中,但同样的想法].在ajax调用返回后,我尝试setState,但是我得到了文档未定义的错误.

我不知道怎么解决这个问题.有什么值得期待的吗?承诺或回调我应该在做setState吗?

这就是我想要做的:

componentWillMount: function() {
    request.get(this.fullUrl()).end(function(err, res) {
        this.setState({data: res.body});
    }.bind(this));
}
Run Code Online (Sandbox Code Playgroud)

reactjs node-request

11
推荐指数
2
解决办法
2242
查看次数

Node中并行/异步的多个分页GET API调用

我正在调用bitbucket API来获取repo中的所有文件.我已达到这样的程度,我可以获取repo中所有文件夹的列表,并对repo中的所有根文件夹进行第一次API调用,并获取所有文件夹的前1000个文件列表.

但问题是bitbucket api一次只能给我每个文件夹1000个文件.

我需要附加一个查询参数&start = nextPageStart并再次进行调用,直到它为null并且每个API的isLastPage为true.如何使用以下代码实现这一目标?

我从第一次调用api获得nextPageStart.请参阅下面的API响应.

下面是我到目前为止的代码.

任何帮助或指导表示赞赏.

来自每个文件夹调用的各个API的响应.

{
    "values": [
        "/src/js/abc.js",
        "/src/js/efg.js",
        "/src/js/ffg.js",
        ...
    ],
    "size": 1000,
    "isLastPage": false,
    "start": 0,
    "limit": 1000,
    "nextPageStart": 1000
}
Run Code Online (Sandbox Code Playgroud)

函数,我进行异步调用以获取文件列表

export function getFilesList() {
  const foldersURL: any[] = [];
  getFoldersFromRepo().then((response) => {
    const values = response.values;
    values.forEach((value: any) => {
    //creating API URL for each folder in the repo
      const URL = 'https://bitbucket.abc.com/stash/rest/api/latest/projects/'
                   + value.project.key + '/repos/' + value.slug + '/files?limit=1000';
      foldersURL.push(URL);
        });
    return foldersURL;
      }).then((res) => {
    // …
Run Code Online (Sandbox Code Playgroud)

javascript node.js async.js typescript node-request

9
推荐指数
1
解决办法
777
查看次数

使用node-request和fs Promisified下载图像,Node.js中没有管道

我一直在努力成功下载图像而不用它将它传递给fs.这就是我所取得的成就:

var Promise = require('bluebird'),
    fs = Promise.promisifyAll(require('fs')),
    requestAsync = Promise.promisify(require('request'));

function downloadImage(uri, filename){
    return requestAsync(uri)
        .spread(function (response, body) {
            if (response.statusCode != 200) return Promise.resolve();
            return fs.writeFileAsync(filename, body);
        })
       .then(function () { ... })

       // ...
}
Run Code Online (Sandbox Code Playgroud)

有效输入可能是:

downloadImage('http://goo.gl/5FiLfb', 'c:\\thanks.jpg');
Run Code Online (Sandbox Code Playgroud)

我确实认为问题在于处理问题body.我已经尝试将其转换为Buffer(new Buffer(body, 'binary')等)几种编码,但都失败了.

感谢前方的任何帮助!

fs node.js promise bluebird node-request

8
推荐指数
1
解决办法
6064
查看次数

某些站点的节点请求在大多数情况下导致ETIMEDOUT错误

眼镜

这是我正在运行的系统的一些背景信息:

  • Ubuntu v 14.04

  • 节点v4.4.0

  • 节点request模块v2.69.0

所有这些都在位于纽约的中心的DigitalOcean Droplet /服务器上.

 

问题描述

所以我运行以下js文件:

var request = require('request');

var url = 'http://www.supremenewyork.com/';

request(url, function(err, res, body) { 
  if (err) {
    console.log(err);
    return;
  }

  console.log('body:', body);
});
Run Code Online (Sandbox Code Playgroud)

在我的水滴上.大约70-80%的时间我尝试这个,现在每次尝试这个,我都会得到一个ETIMEDOUT错误:

{ [Error: connect ETIMEDOUT 52.6.25.180:80]
  code: 'ETIMEDOUT',
  errno: 'ETIMEDOUT',
  syscall: 'connect',
  address: '52.6.25.180',
  port: 80 }
Run Code Online (Sandbox Code Playgroud)

值得注意的是,错误似乎出现在"波浪"中.也就是说,我会设法在一段时间内收到一些请求,然后是一系列ETIMEDOUT错误.错误的发生频率超过了我能够通过大约3:1的错误与成功之间的比率来获得我的请求.

在我自己的计算机上(运行OS X El Capitan的Mac),运行给定站点的js文件可以100%成功(即我之前从未遇到过这个问题)...所以我不确定为什么会出现这个问题包含在我的水滴中.

任何指针将不胜感激.

 

研究/类似文章:

hosting network-programming node.js digital-ocean node-request

8
推荐指数
1
解决办法
4494
查看次数

在node express中再次调用相同的请求

我使用Express将请求代理到受OAuth 2访问令牌保护的单独API服务器.当令牌过期时,服务器将返回一个401,我现在正在我的路由器中间件中处理,然后去刷新与客户端会话关联的访问令牌(我正在使用express-session).

这是我的代码:

router.js

app.use('/api', require('./routes.js'));

routes.js

var express = require('express'),
  router = express.Router(),
  routesController = require('./routes.controller.js');

router.route('/*')
  .get(routesController.fetch);
Run Code Online (Sandbox Code Playgroud)

routes.controller.js

module.exports.fetch = function(req, res, next) {
  var options = helpers.buildAPIRequestOptions(req);
  request(options, function(err, response, body){
    if(response.statusCode === 401) {
      authController.refreshToken(req, res, next);
    } else {
      res.status(response.statusCode).send(body);
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

authController

module.exports.refreshToken = function(req, res, next) {
  var formData = {
      grant_type: 'refresh_token',
      refresh_token: req.session.refreshToken,
      scope: 'PRODUCTION'
    },
    headers = {
      'Authorization' : 'Basic ' + consts.CLIENT_KEY_SECRET_BASE64_DEV
    };
  request.post({url:consts.ACCESS_TOKEN_REQUEST_URL_DEV, form:formData, …
Run Code Online (Sandbox Code Playgroud)

middleware node.js express node-request

7
推荐指数
1
解决办法
922
查看次数

如何将 JSON 数据保存到 Google Firebase 的 Firestore 数据库?

是否可以将 JSON 数据直接保存到 Firebase Firestore?

我尝试保存下面的 json 数据,

数据

[{"id":"1234","name":"Chair","symbol":"CHR"}]
Run Code Online (Sandbox Code Playgroud)

代码:

request({url: 'https://api.example.com/v1/data', json: true}, function (error, response, body) {
        if (!error && response.statusCode === 200) {
            res.send(body);    
            console.log(body);    
        }
        else {
            console.log(response.statusCode + " " + error);
        }
        db.collection('market').doc('price').set(body);

    });
Run Code Online (Sandbox Code Playgroud)

错误

错误:参数“数据”不是有效的文档。Input 不是一个普通的 JavaScript 对象。

解决方法

  1. JSON.parse() 用于正文

    db.collection('market').doc('price').set(JSON.parse(body));
    
    Run Code Online (Sandbox Code Playgroud)
  2. JSON.stringify() 用于正文

    db.collection('market')doc('price').set(JSON.stringify(body));
    
    Run Code Online (Sandbox Code Playgroud)

我仍然收到错误。

json node.js firebase node-request google-cloud-firestore

7
推荐指数
1
解决办法
7413
查看次数