You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Async Map代码实现带自定义请求头的多URL并行请求?

解决async.map批量带请求头下载URL的问题

嗨,这事儿不难,我来给你捋清楚!

你原来的代码里直接把request函数传给async.map,是因为request可以直接接收URL字符串作为参数发起GET请求,但要加自定义请求头的话,我们得给每个URL创建一个包含请求头的配置对象,而不是单纯传URL字符串。

只需要给async.map写一个包装函数,在里面处理每个URL的请求配置就行,修改后的代码如下:

var request = require('request');
var async = require('async');

var urls = ['http://myurl1.com', 'http://myurl2.com', 'http://myurl3.com'];
// 自定义请求处理函数,给每个请求加上指定的请求头
function downloadWithHeaders(url, callback) {
  var requestOptions = {
    url: url,
    method: 'GET', // GET是默认值,也可以省略
    headers: {
      'x-url-key': 'myurlkey'
    }
  };
  // 用配置对象发起请求,并把async的回调传递过去
  request(requestOptions, callback);
}

async.map(urls, downloadWithHeaders, function(err, results) {
  if (err) throw(err);
  console.log(results.length); // 结果长度会和urls一致
});

关键点说明:

  • 我们不再直接传request给async.map,而是写了一个downloadWithHeaders函数作为中间层,这样就能给每个请求注入自定义的请求头配置
  • requestOptions里的headers字段就是你需要的请求头,注意键名的引号(如果有连字符的话必须加引号)
  • 最后把async提供的callback传给request,确保异步流程能被async正确管理,错误和结果都能正常传递

如果之后你需要对每个请求的响应做额外处理(比如解析响应体),也可以在downloadWithHeaders的request回调里先处理,再调用callback返回结果~

内容的提问来源于stack exchange,提问作者Illusionist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:27:42