套接字的Python问题
我正在做一个涉及套接字的简单项目。有点像telnet。我只想让它连接到端口80并执行GET/ 以下是我正在尝试的:套接字的Python问题,python,http,sockets,Python,Http,Sockets,我正在做一个涉及套接字的简单项目。有点像telnet。我只想让它连接到端口80并执行GET/ 以下是我正在尝试的: import socket size = 100000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = "localhost" port = 80 s.connect((host, port)) stuff = "GET /" s.send(stuff) r = s.recv(size) print(r)
import socket
size = 100000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "localhost"
port = 80
s.connect((host, port))
stuff = "GET /"
s.send(stuff)
r = s.recv(size)
print(r)
导入套接字
尺寸=100000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host=“localhost”
端口=80
s、 连接((主机、端口))
stuff=“GET/”
s、 送(东西)
r=s.recv(尺寸)
印刷品(r)
我运行它,它会连接,但是我没有得到get的输出。HTTP规范说在头之后需要两个换行符('\r\n'*2
)。尝试:
stuff = 'GET /\r\n\r\n'
HTTP规范说在头之后需要两个换行符(“\r\n'*2
)。尝试:
stuff = 'GET /\r\n\r\n'
在GET/
之后至少需要一个空行,因此请使用stuff=“GET/\n\n”
。阅读。您需要在GET/
后面至少有一个空行,所以请使用stuff=“GET/\n\n”
。阅读。您的主要问题是在“GET/”之后缺少换行符。HTTP协议要求换行,所以服务器在等待它,这就是为什么您在等待响应
(一个小问题是缓冲区太大,Python套接字模块建议使用2的小功率,如4096)
我建议:
import socket
size = 4096
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "localhost"
port = 80
s.connect((host, port))
stuff = "GET /\n"
s.send(stuff)
buf = ''
while True:
r = s.recv(size)
if not r: break
buf += r
print(buf)
最后的循环确保您将获得整个响应
最后,我推荐urllib2,它为您实现HTTP并避免此类错误:
import urllib2
print(urllib2.urlopen('http://localhost').read())
您的主要问题是在“GET/”之后缺少换行符。HTTP协议要求换行,所以服务器在等待它,这就是为什么您在等待响应
(一个小问题是缓冲区太大,Python套接字模块建议使用2的小功率,如4096)
我建议:
import socket
size = 4096
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "localhost"
port = 80
s.connect((host, port))
stuff = "GET /\n"
s.send(stuff)
buf = ''
while True:
r = s.recv(size)
if not r: break
buf += r
print(buf)
最后的循环确保您将获得整个响应
最后,我推荐urllib2,它为您实现HTTP并避免此类错误:
import urllib2
print(urllib2.urlopen('http://localhost').read())
您是否尝试过获取/HTTP/1.1
?RFC2616似乎需要请求行中的协议版本您是否尝试过GET/HTTP/1.1
?RFC2616似乎需要请求行中的协议版本