关键词:
最近需要在公司学习socket编程,但是不能直接连接外网,需要设置一个代理才能正常访问。报错示例:
import socket def blocking(wd): sock = socket.socket() sock.connect((‘www.baidu.com‘,80)) # 连接百度 request = ‘GET HTTP/1.0 Host:www.baidu.com ‘.format(‘/s?wd=‘.format(wd)) # 构造http请求头 response = b‘‘ # 用于接收数据 sock.send(request.encode()) # 发送http请求 chunk = sock.recv(1024) # 一次接收1024字节数据 while chunk: # 循环接收数据,若没有数据了说明已接收完 response += chunk # 字符串拼接 chunk = sock.recv(1024) print(response.decode()) if __name__ == ‘__main__‘: blocking(‘python‘)
解决办法:要使用代理,需要用到socks这两个包。socks在python3中不是自带的,所以需要通过pip install PySocks这个模块。
增加如下带代码即可:
import socks import socket socks.set_default_proxy(socks.HTTP, ‘地址‘, 端口, True, 用户名, 密码) socket.socket = socks.socksocket
修改后示例:
import socket import socks # pip install PySocks socks.set_default_proxy(socks.HTTP,addr=‘192.168.105.71‘,port=80) #设置socks代理 socket.socket = socks.socksocket # 把代理应用到socket def blocking(wd): sock = socket.socket() sock.connect((‘www.baidu.com‘,80)) # 连接百度 request = ‘GET HTTP/1.0 Host:www.baidu.com ‘.format(‘/s?wd=‘.format(wd)) # 构造http请求头 response = b‘‘ # 用于接收数据 sock.send(request.encode()) # 发送http请求 chunk = sock.recv(1024) # 一次接收1024字节数据 while chunk: # 循环接收数据,若没有数据了说明已接收完 response += chunk # 字符串拼接 chunk = sock.recv(1024) print(response.decode()) if __name__ == ‘__main__‘: blocking(‘python‘)
可以看到已经正常请求到百度。
注意:socks的类型,即set_default_proxy的第一个参数,网上很多资料写的都是socks.SOCKS5。如果出现下面这个错误,请检查代理服务的类型,我这里改成socks.HTTP即可正常发送请求:
socks.GeneralProxyError: Socket error: Connection closed unexpectedly
代理池的维护(代码片段)
...atihttp,requests,redis-py,pyquery,flask二、代理池的架构分为4个模块:存储模块,获取模块,检测模块,借口模块、1、存储模块:使用Redis的有序集合,用来做代理的去重和状态标识,同时也是中心模块和基础模块,将其他模块串联起... 查看详情
apache_conf给iterm终端设置代理(代码片段)
pyhon3实现机器学习经典算法id3决策树(代码片段)
一、ID3决策树概述 ID3决策树是另一种非常重要的用来处理分类问题的结构,它形似一个嵌套N层的IF…ELSE结构,但是它的判断标准不再是一个关系表达式,而是对应的模块的信息增益。它通过信息增益的大小,从根节点开始... 查看详情
socket模块(代码片段)
1、TCP和UDPTCP可靠性的实现:校验码接收方反馈信息包附带序号UDP:快不需要花费时间建立和关闭连接快偶尔丢失一两个消息包无所谓,但是TCP会严格检查快UDP的限制是一个信息包不超过64KB的数据TCP和UDP区别就是UDP不建立连接,... 查看详情
给iterm终端设置代理(代码片段)
本文介绍如何为自己的终端设置代理,从而实现在命令行中访问Google。1.背景当你使用SSFQ时,大部分浏览器都可以成功访问Google,但是在命令行下执行curlhttps://www.google.com时,会超时失败。对于类似的这种情况,本文将解释出现... 查看详情
ajax简单应用之个人简历页面搭建(代码片段)
1.搭建HTTP静态Web服务器。代码实现:1#1.导入socket模块2importsocket3importthreading456#创建服务器类7classHttpServerSocket(object):8#给服务器类的对象设置属性9def__init__(self):10#2.创建Socket对象11self.server_socket=socket.socket(socket.AF_I 查看详情
git设置代理(代码片段)
...的提交代码。刚巧我有国外的云服务器,自己搭建了一个socket5代理。设置代理命令设置代理gitconfig--globalhttps.proxy"socks5://ip:1080"#socksgitconfig--globalhttp.proxy\'socks5://127.0.0.1:1080\'gitconfig--globalhttps.proxy\'socks5://127.0.0.1:1080\'#httpgitconfig--gl... 查看详情
pyhon3实现机器学习经典算法knn(代码片段)
一、KNN概述 K-(最)近邻算法KNN(k-NearestNeighbor)是数据挖掘分类技术中最简单的方法之一。它具有精度高、对异常值不敏感的优点,适合用来处理离散的数值型数据,但是它具有 非常高的计算复杂度和空间复杂度... 查看详情
socket模块(代码片段)
socket模块简介socket即套接字,是用来建立网络通信连接的基础,大量的应用程序都是通过套接字来实现网络通信,诸如HTTP浏览器、RPC通信、FTP下载等。使用常见的TCP连接使用socket的通信原语,如bind/listen/accept/connect/recv/sendall等... 查看详情
socket模块(代码片段)
#服务端importsocketsk=socket.socket()#print(sk)address=(‘127.0.0.1‘,8000)sk.bind(address)sk.listen(3)print(‘waiting....‘)conn,addr=sk.accept()#print(conn,addr)inp=input(‘>>>‘)conn.send(bytes(inp 查看详情
socket模块的使用(代码片段)
socket模块学习网络编程,其实就是学习socket模块。socket是什么?翻译过来就是套接字,是对底层的TCPIPUDP等网络协议进行封装使得上层的应用程序开发者,不用直接接触这些复杂的,艰涩的协议。对于程序而言,他就是封装好的... 查看详情
网络编程之模块的使用(代码片段)
socket模块的使用1.模仿CS架构模型1.1简版服务器端importsocketserver=socket.socket()#创建一个服务器对象ip_port=(‘192.168.15.79‘,8080)#创建一个元组server.bind(ip_port)#将服务器和ip地址进行绑定server.listen(3)#设置服务器可以同时监听多少个客户... 查看详情
人性化的requests模块(响应与编码header处理cookie处理重定向与历史记录代理设置)(代码片段)
Requests库是第三方模块,需要额外进行安装。Requests是一个开源库pipinstallrequests去GitHub下载回来,进入解压文件,运行setup.py比urllib2实现方式的代码量少,下面是POST请求:importrequestspostdata=‘key‘:‘value‘r=requests.post(‘http://www.cn... 查看详情
nginx反向代理(代码片段)
...服务器进行通信的一种规范,主要在不同的场景使用以下模块实现不同的功能。 查看详情
ua池和代理池(代码片段)
...器过程中,下载中间件可以对请求进行一系列处理。比如设置请求的User-Agent,设置代理等(2)在下载器完成将Response传递给引擎中,下载中间件可以对响应进行一系列 查看详情
scrapy框架设置ua池与代理池(代码片段)
...过程中,下载中间件可以对请求进行一系列的处理。比如设置User-Agent、设置代理IP等。在下载器将Response传递给引擎的过程中,下载中间件可以对响应进行一 查看详情
scoket模块粘包问题tcp协议特点(代码片段)
scoket()模块函数用法importsocketsocket.socket(socket_family,socket_type,protocal=0)获取tcp/ip套接字tcpsock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)获取udp/ip套接字udpsock=socket.socket(socket.AF_INET,socket.S 查看详情
socket编程,socketserver模块(代码片段)
一、SocketServer的几种类型面向远程:TCP协议链接:socketserver.TCPServer(server_address,RequestHandlerClass,bind_and_activate=True).UDP协议链接:socketserver.UDPServer(server_address,RequestHandlerClass,bind_and_activate=Tr 查看详情