这是我试图运行的代码。但该程序产生一个socket.error。我有一个网络代理,端口8080连接到我的互联网,我还需要在这里添加更多细节来创建这个套接字连接?
import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('www.pythonlearn.com', 80))
mysock.send('GET http://www.pythonlearn.com/code/intro-short.txt HTTP/1.0\n\n')
while True:
data = mysock.recv(512)
if ( len(data) < 1 ) :
break
print data;
mysock.close()
答案 0 :(得分:1)
如果我运行您的代码,我会从第5行收到错误TypeError: a bytes-like object is required, not 'str'
。
尝试使用:mysock.send(b'GET http://www.pythonlearn.com/code/intro-short.txt HTTP/1.0\n\n')
,并在字符串前加b
表示bytestring
。
答案 1 :(得分:1)
运行代码时出现类型错误,连接套接字时没有错误。使用套接字库时,请使用makefile方法,这样您就不必处理恼人的细节。
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_sock_input = mysock.makefile('r')
my_sock_output = mysock.makefile('w')
现在my_sock_input可以使用像readline()
这样的方法,而不需要保留或删除字节的任何细节。输出相同的便利,但写入。记得关闭所有这些!
关于你的问题,我尝试使用我的makefile变量编写类似的东西,但我还没有收到任何消息。所以还有其他一些问题。
现在,解决方案。下载网址并阅读其内容的更简单方法是使用urllib.request
库。如果您使用的是Python 2.7,只需import urrlib
。
import urllib.request
data = urllib.request.urlopen('http://www.pythonlearn.com/code/intro-short.txt')
readable = data.read()
print(readable)