由于需要使用socks代理,查看了nodejs的各种socks库,最终的结论是socks库是其中最完善的,而socks-proxy-agent是以其为基础的封装,可以直接和http模块对接。

不过在尝试后发现socks-proxy-agent建立的连接无法使用认证功能,而直接使用socks库是可以的。因此查看了其源码。

  var options = {
proxy: {
ipaddress: proxy.host,
port: proxy.port,
type: proxy.version
},
target: {
port: opts.port
},
command: 'connect'
}; if (proxy.lookup) {
// client-side DNS resolution for "4" and "5" socks proxy versions
dns.lookup(opts.host, onlookup);
} else {
// proxy hostname DNS resolution for "4a" and "5h" socks proxy servers
options.target.host = opts.host;
SocksClient.createConnection(options, onhostconnect);
}
}

可见options只选用了地址,端口,类型,等少数参数,认证参数不在其中。

按照socks的说明

socks5的认证参数为:

options.proxy.authentication={"username":string,"password":string};

socks4的用户id为://socks4不支持密码。

options.proxy.userid=string;

于是添加了一段

  if (proxy.auth){
var auth=proxy.auth.split(":");
var optp=options.proxy;
optp.authentication={"username":auth[0],"password":auth[1]};
optp.userid=auth[0];
}

连接socks5成功了,连接socks4失败,显示:"Error: Socket Closed",这样的效果和直接使用socks相同,所以显然问题在于socks库本身(测试的服务器是ccproxy)。

目标已经达到了,收工。

修改已经提交至github:https://github.com/hjiayz/node-socks-proxy-agent

最新文章

  1. xamarin android webview XHR错误
  2. php实现的笛卡儿积
  3. wpf 双击行。。获得行信息
  4. 用Canvas写一个炫酷的时间更新动画玩玩
  5. 针对无线信道衰落特性分析3G,4G,5G的关键技术异同点
  6. 使用NSOperation使用,创建线程中传递多个参数
  7. mybatis怎样配置数据库集群
  8. 计算 unique word numbers
  9. 正则表达式_matches(Regex)
  10. WKWebView使用过程中的那些坑
  11. Flink资料(8) -- Flink代码贡献的指导及准则
  12. Swift - 使用TableView的静态单元格进行页面布局
  13. Visual Studio 2012编译的程序无法在XP下运行的解决办法【转】
  14. 【SVN】关于钩子的一些使用
  15. 【CentOS7.0】虚拟机如何实现扩展存储空间
  16. A - Longest k-Good Segment (尺取法)
  17. 前端分页插件pagination
  18. ACM-最短路之中的一个个人的旅行——hdu2066
  19. Angular之替换根组件
  20. Oracleシノニムについて

热门文章

  1. 【[CTSC2012]熟悉的文章】
  2. 获取input的值
  3. 简单使用Idea创建三层架构项目和数据库连接(使用原生ajax进行访问+ajax)
  4. EntityFrameWork简单操作 EF数据上下文对象操作数据增删改差及批处理
  5. 如何打卡后缀为3ds的文件
  6. ffmpeg视频和声音
  7. SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程
  8. if switch for while
  9. 子域收集-fierce
  10. React学习(1)—— 基础项目搭建以及环境配置