nodejs创建一个http服务器来接收上传的文件

nodejs创建一个http服务器来接收上传的文件,第1张

时间有限。自己看

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

var connect = require('connect')

var http = require('http')

var app = connect()

var multipart = require('connect-multiparty');

// parse urlencoded request bodies into reqbody

var bodyParser = require('body-parser')

appuse(bodyParserurlencoded())

appuse(multipart())

// respond to all requests

apppost('/upload', function(req, resp) {

consolelog(reqbody, reqfiles);

// don't forget to delete all reqfiles when done

});

//create node<a href="https://wwwbaiducom/swd=js&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3PAuWP1T4rH9-nyRzPADk0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1DvrH0YPWmsrjRdnWR3Pjn4rj6" target="_blank" class="baidu-highlight">js</a> http server and listen on port

httpcreateServer(app)listen(3000)

参考 : https://githubcom/senchalabs/connect

DMZ主机是完全将内网的一台计算机暴露给外网。

端口映射的只是将内网计算机的某个端口开放给外网去访问

所以,你的这个情况,用端口映射完全可以

设置如下:

内网计算机IP 19216812

无线路由器 19216811

开放WEB端口80,FTP端口21

设置--端口映射

端口80

协议TCP

IP地址 19216812

非常简单,现在的路由器都是超级简单的。

自己搭建高质量亿级IP的HTTP/Socks5隧道代理

一、前言

    在做爬虫、数据采集、账号搜索项目时,需要用到高质量代理IP。目前比较流行也是最常见的代理IP服务,大部分是通过api链接提取。通过不断的访问api接口,api服务器返回一个或多个可用代理IP,然后将代理IP应用于自己的程序或软件中。api服务器维护了一个可用IP池,并且不断在更新加入新的可用IP。客户端访问时,则返回最新可用IP。

    API提取方式简单实现,但也有一定弊端,主要是客户端需要不断的访问api接口获取最新代理,需要一直循环。根据代理质量的不同,获取到的代理不一定全部可用,影响了爬虫的效率。这里推荐 酷鱼代理IP(https://kuyukuyucom),有动态代理和私密代理,速度和可用率都比较好。

    那么,有没有不需要api的代理方式呢,那我们来看看隧道代理。

 

二、隧道代理是什么

    隧道代理只需设置固定接口,云端自动切换不同IP,省去了客户端频繁获取的麻烦。并且通过隧道代理的多路负载技术,大大提高的代理速度和可用率。隧道代理没有一次提取多少个IP的概念,主要是通过对不同客户的并发请求数进行限制。一般可达到50-100次/秒的并发请求。

 

三、隧道代理架构

如上图,隧道代理工作步骤为:

代理使用者向隧道代理服务器发出请求。例如酷鱼隧道代理地址为:tunnelkuyukuyucom。

隧道代理服务器收到代理使用者请求后,会选择最优线路进行转发,在代理使用者和动态代理节点之间建立隧道连接。

动态代理服务器请求代理使用者指定的目标站。

动态代理服务器将目标站返回的结果,直接返回给代理使用者。

四、获取代理IP池

隧道代理有多个可用路径进行转发,采用多路复用、择优选择技术,提高代理成功率。经测试成功率可达99%以上。

代理服务器返回结果时没有经过隧道代理,而是直接返回给代理使用者。因为隧道代理仅起到建立隧道连接的作用,并不参与数据传输。保障了代理执行效率。

使用方便,需要频繁切换代理。

支持高并发,多客户端同时使用。

五、实现步骤

首先需要找到一个可持续供给的代理IP池,代理IP最好是同时支持HTTP(s)和Socks5协议的,这样我们的隧道代理也可以支持socks5。这里推荐酷鱼私密代理 https://kuyukuyucom/mains/secret ,可用率99%以上,速度快。

购买后在用户中心获取API提取链接,然后设置白名单和提取数量。

将获取到的代理写入Squid配置文件。/etc/squid/squidconf

重载配置文件,使用配置生效。

每隔1秒重复一次,并不断循环。

六、Squid使用方法

将squid 做为代理服务器

备份源文件 cp /etc/squid/squidconf /etc/squid/squidconfsource,用于脚本自动更新

在squid所在服务器运行脚本。

七、进一步优化

由于squid只支持http(s),不支持socks5协议,所有就算购买的代理池支持socks5,隧道代理也不支持。如需支持socks5,只需要使用其他软件替代squid。如果有这方面的需要可以联系酷鱼代理客服。

可以在隧道代理上使用iptables进行限制访问,达到白名单功能。

iptables还可以对单个客户端请求数量或流量限制,达到限流功能。

文章来源:网页链接

首先,标准HTTP协议对上传文件等表单的定义在这里:wwwietforg/rfc/rfc1867txt 大概数据包格式如下:

单文件:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x

content-disposition: form-data; name="field1"

Joe Blow

--AaB03x

content-disposition: form-data; name="pics"; filename="file1txt"

Content-Type: text/plain

contents of file1txt

--AaB03x--

多文件:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x

content-disposition: form-data; name="field1"

Joe Blow

--AaB03x

content-disposition: form-data; name="pics"

Content-type: multipart/mixed, boundary=BbC04y

--BbC04y

Content-disposition: attachment; filename="file1txt"

其次,python上传文件的几种方法:

1 自己封装HTTP的POST数据包:http//stackoverflowcom/questions/680305/using-multipartposthandler-to-post-form-data-with-python

import httplibimport mimetypesdef post_multipart(host, selector, fields, files): content_type, body = encode_multipart_formdata(fields, files) h = httplibHTTP(host) hputrequest('POST', selector) hputheader('content-type', content_type) hputheader('content-length', str(len(body))) hendheaders() hsend(body) errcode, errmsg, headers = hgetreply() return hfileread() def encode_multipart_formdata(fields, files): LIMIT = '----------lImIt_of_THE_fIle_eW_$' CRLF = '\r\n' L = [] for (key, value) in fields: Lappend('--' + LIMIT) Lappend('Content-Disposition: form-data; name="%s"' % key) Lappend('') Lappend(value) for (key, filename, value) in files:

第1步:安装一个服务我这装的是oneInstack

第2步:先在阿里云添加一个安全组50

第3步:ssh:在oneinstack 执行/vhostsh 这是添加虚拟机

第4步:在/usr/local/nginx/conf/vhost目录下 修改端口

第5步:web 服务开启 端口 iptables -A INPUT -p tcp --dport 50 -j ACCEPT

第6步:ssh:执行service nginx restart 重启服务

第7步:在/data/wwwroot/ip地址:50 放自己页面文件

完了,你可以在服务器ip后面加50就可以访问了,你还可以类似开启30,40,60之类的端口

nginx部署

1在下载的ngnix的工具中执行下面命令:

start /nginxexe回车即启动了nginx服务

2检查是否成功

输入http://localhost 会有Welcome to nginx!

3nginx配置

找到nginx下的conf/nginxconf文件,设置代理相关信息,重点是server{}中的内容

server {

listen 80;

server_name testcom;

# 这里是你要代理的测试环境域名加上-local

# 比如你的项目测试环境为testcom,你本地此处可以设置为testcom,当然你可以随便设置

location /{

add_header 'Access-Control-Allow-Origin' '';

add_header 'Access-Control-Allow-Credentials' 'true';

add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';

add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';

# 此处8091是我们本地运行项目的端口号,设置成跟你本地起的服务端口号一样就行

proxy_pass http://127001:8091/;

}

}

登录后复制

4本机dns配置

修改本地host文件配置

找到目录C:\Windows\System32\drivers\etc,打开hosts文件,修改文件,加入127001 testcom

然后在testcom 可以看到Welcome to nginx!

5运行

先输入/nginxexe -t检查nginx配置是否正确

继续输入nginx -s reload重启(nginx配置文件修改后都要重启nginx才会生效)

刷新dns: ipconfig /flushdns

ngnix设置一个服务

root就是文件的 地址 localhost:8000/文件名后缀 就是页面地址

server {

listen 8000;

# listen somename:8080;

# server_name somename alias anotheralias;

location / {

root "E:\华侨城\西安欢乐谷\聚合-集成小程序\src\pages\index";

index indexhtml indexhtm;

}

}

登录后复制

本地通过http-server启动服务

npm install http-server -g

http-server -p 8881

页面输入127001:8881 然后写入页面aaahtml 就可以访问了

登录后复制

重启redis

1cmd打开redis目录:

redis-serverexe rediswindowsconf

每次重启 是不是很麻烦,自动启动的方法:

1在redis目录启动redis: redis-serverexe rediswindowsconf

2在redis设置用户名密码:

redis-cliexe

然后输入 set name wangjigen 设置自己的名字 getname 看看自己是否设置成功

config set requirepass wjg720941设置密码 auth 需要输入自己的密码

config get requirepass 查看自己的用户名密码

3设置服务命令

redis-server --service-install rediswindows-servi` ceconf --loglevel verbose

然后在计算机服务点击可开启

over

然而启动的时候会报错

node_redis: Warning: Redis server does not require a password, but a password was supplied

1可能是这是redis程序没有指向windowconf 文件 redis-serverexe rediswindowsconf

2可能是或者在 rediswindowsconf文件搜索requirepass 添加密码 requirepass asd123

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » nodejs创建一个http服务器来接收上传的文件

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情