当前位置: 首页 > news >正文

快速做网站的方法网站修改文案

快速做网站的方法,网站修改文案,wordpress分页标签,在线网站建设我们这里主要讲使用HTTP#xff0f;1.1协议中的CONNECT方法建立起来的隧道连接#xff0c;实现的HTTP Proxy。这种代理的好处就是不用知道客户端请求的数据#xff0c;只需要原封不动的转发就可以了#xff0c;对于处理HTTPS的请求就非常方便了#xff0c;不用解析他的内容…        我们这里主要讲使用HTTP1.1协议中的CONNECT方法建立起来的隧道连接实现的HTTP Proxy。这种代理的好处就是不用知道客户端请求的数据只需要原封不动的转发就可以了对于处理HTTPS的请求就非常方便了不用解析他的内容就可以实现代理。 启动代理监听 要想做一个HTTP Proxy我们需要启动一个服务器监听一个端口用于接收客户端的请求。Golang给我们提供了强大的net包供我们使用我们启动一个代理服务器监听非常方便。 l, err : net.Listen(tcp, :8080) if err ! nil {log.Panic(err)} 以上代理我们就实现了一个在8080端口上监听的服务器我们这里没有写ip地址默认在所有ip地址上进行监听。如果你只想本机适用可以使用127.0.0.1:8080这样机器就访问不了你的代理服务器了。 监听接收代理请求 启动了代理服务器就可以开始接受不了代理请求了有了请求我们才能做进一步的处理。 for {client, err : l.Accept() if err ! nil {log.Panic(err)} go handleClientRequest(client)} Listener接口的Accept方法会接受客户端发来的连接数据这是一个阻塞型的方法如果客户端没有连接数据发来他就是阻塞等待。接收来的连接数据会马上交给handleClientRequest方法进行处理这里使用一个go关键字开一个goroutine的目的是不阻塞客户端的接收代理服务器可以马上接收下一个连接请求。 解析请求获取要访问的IP和端口 有了客户端的代理请求了我们还得从请求里提取客户端要访问的远程主机的IP和端口这样我们的代理服务器才可以建立和远程主机的连接代理转发。 HTTP协议的头信息里就包含有我们需要的主机名(IP)和端口信息并且是明文的协议很规范类似于 CONNECT www.google.com:443 HTTP/1.1 Host: www.google.com:443 Proxy-Connection: keep-alive User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36 可以看到我们需要的在第一行,第一个行的信息以空格分开第一部分CONNECT是请求方法这里是CONNECT除此之外还有GETPOST等都是HTTP协议的标准方法。 第二部分是URLhttps的请求只有host和porthttp的请求是一个完成的url等下会看个样例就明白了。 第三部是HTTP的协议和版本这个我们不用太关注。 以上是一个https的请求我们看下http的 GET http://www.flysnow.org/ HTTP/1.1 Host: www.flysnow.org Proxy-Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36 可以看到htt的没有端口号默认是80比https多了schame—http://。 有了分析下面我们就可以从HTTP头信息中获取请求的url和method信息了。 var b [1024]byten, err : client.Read(b[:]) if err ! nil {log.Println(err) return} var method, host, address stringfmt.Sscanf(string(b[:bytes.IndexByte(b[:], \n)]), %s%s, method, host)hostPortURL, err : url.Parse(host) if err ! nil {log.Println(err) return} 然后需要进一步对url进行解析获取我们需要的远程服务器信息 if hostPortURL.Opaque 443 { //https访问address hostPortURL.Scheme :443} else { //http访问if strings.Index(hostPortURL.Host, :) -1 { //host不带端口 默认80address hostPortURL.Host :80} else {address hostPortURL.Host} 这样就完整了获取了要请求服务器的信息他们可能是以下几种格式 ip:port hostname:port domainname:port 就是有可能是ipv4orv6有可能是主机名内网有可能是域名(dns解析) 代理服务器和远程服务器建立连接 有了远程服务器的信息了就可以进行拨号建立连接了有了连接才可以通信。 //获得了请求的host和port就开始拨号吧 server, err : net.Dial(tcp, address) if err ! nil {log.Println(err) return} 数据转发 拨号成功后就可以进行数据代理传输了 if method CONNECT {fmt.Fprint(client, HTTP/1.1 200 Connection established\r\n)} else {server.Write(b[:n])} //进行转发go io.Copy(server, client)io.Copy(client, server) 其中对CONNECT方法有单独的回应客户端说要建立连接代理服务器要回应建立好了然后才可以像HTTP一样请求访问。 完整代码 到这里我们的代理服务器全部开发完成了下面是完整的源代码 package mainimport ( bytesfmtiolognetnet/urlstrings) func main() {log.SetFlags(log.LstdFlags|log.Lshortfile)l, err : net.Listen(tcp, :8081) if err ! nil {log.Panic(err)} for {client, err : l.Accept() if err ! nil {log.Panic(err)} go handleClientRequest(client)}}func handleClientRequest(client net.Conn) { if client nil { return} defer client.Close() var b [1024]byten, err : client.Read(b[:]) if err ! nil {log.Println(err) return} var method, host, address stringfmt.Sscanf(string(b[:bytes.IndexByte(b[:], \n)]), %s%s, method, host)hostPortURL, err : url.Parse(host) if err ! nil {log.Println(err) return} if hostPortURL.Opaque 443 { //https访问address hostPortURL.Scheme :443} else { //http访问if strings.Index(hostPortURL.Host, :) -1 { //host不带端口 默认80address hostPortURL.Host :80} else {address hostPortURL.Host}} //获得了请求的host和port就开始拨号吧server, err : net.Dial(tcp, address) if err ! nil {log.Println(err) return} if method CONNECT {fmt.Fprint(client, HTTP/1.1 200 Connection established\r\n)} else {server.Write(b[:n])} //进行转发go io.Copy(server, client)io.Copy(client, server)}
http://www.hkea.cn/news/14443443/

相关文章:

  • 成都市做网站的公司有没有安全一点的网站
  • 绵阳汽车网站制作wordpress能不能导入html
  • 美食个人网站设计作品做网站中山
  • 微信网站跳转链接怎么做宣传手册设计模板
  • 网站建设陕icp贵州省教育厅办公室关于开展2014年学校门户网站建设评估的通知
  • 北京市建设监理协会网站今天开始做女神免费网站
  • mvc网站开发实例教程企业网站建设合同书标准版
  • 公司网站域名注册流程制作开发app的公司
  • 网站备案最快怎样进入网站的后台
  • 电子商务网站营销的方法热门视频素材
  • 种植类网站模板京东电器商城网上购物
  • 官方网站下载免费建e网效果图
  • 陕西建设银行网站在线做抽奖网站
  • 宁波本地模板网站建设平台怎么搞软件开发
  • 网站制作学习网站ps怎么制作网页设计
  • 怎么做网站推广云浮怎么上国外购物网站
  • 无锡做网站优化价格强强seo博客
  • 网盟官方网站自己在公司上班做网站宣传 侵权吗
  • 学校网站建设企业买了深圳安居房后悔了
  • 制作一个企业网站过程怎么做网站网站推广
  • 手机网站首页怎么做找单位做网站需要注意什么
  • 网站开发工程师适合女生吗黑龙江省城乡和住房建设厅网站首页
  • 响应式网站开发视频教程陈木胜导演
  • 网络营销思想的网站改版计划商业网站创建教程
  • 什么网站可以做软件好的网站设计培训机构
  • 如何规避电子政务门户网站建设的教训小学生有没有必要学编程
  • 网站设计公司哪家比较好大气腐蚀网站建设
  • 住房和城乡建设部网站打不开网站群内容管理系统
  • 北京东城区做网站的公司网站建设优選宙斯站长
  • 2017最新网站设计风格创建一个互联网媒体公司