2012-04-10 49 views
0

我正在学习socket编程,并试图设计一个我的基本http客户端。但不知何故一切顺利,但我没有收到任何数据。你能告诉我我错过了什么吗?套接字不接收数据。为什么?

CODE

import socket 

def create_socket(): 
    return socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

def remove_socket(sock): 
    sock.close() 
    del sock 


sock = create_socket() 
print "Connecting" 
sock.connect(('en.wikipedia.org', 80)) 
print "Sending Request" 
print sock.sendall ('''GET /wiki/List_of_HTTP_header_fields HTTP/1.1 
Host: en.wikipedia.org 
Connection: close 
User-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/) 
Accept-Encoding: gzip 
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7 
Cache-Control: no-cache 
Accept-Language: de,en;q=0.7,en-us;q=0.3 
Referer: d_r_G_o_s 
''') 
print "Receving Reponse" 
while True: 
    content = sock.recv(1024) 
    if content: 
     print content 
    else: 
     break 
print "Completed" 

输出

Connecting 
Sending Request 
298 
Receving Reponse 
Completed 

虽然我期待它给我看维基百科的网页的HTML内容:“(

而且,这将是巨大的如果有人可以分享一些网络资源/书籍,我可以详细阅读有关Python socke的内容t编程为HTTP请求客户端

谢谢!

+2

你的换行符是否正确换行(''\ r \ n'')?另外,在标题之后你应该有一个空行,这告诉服务器标题已经完成。 – 2012-04-10 07:10:18

+0

不,它不是..我认为\ n应该足够,但它不..我知道了..谢谢:) – codersofthedark 2012-04-10 07:57:18

回答

2

对于一个最小的HTTP客户端,你绝对不应该发送Accept-Encoding: gzip - 服务器很可能会回复一个gzip压缩的响应,你将无法通过眼睛获得多少意义。 :)

你没有发送最后的双重\r\n(你是不是真的用\r\n作为规范终止你的行(除非你碰巧在Windows上用Windows行结束符开发,但这只是运气而不是编程。SE)

此外,del sock有没有做什么你认为它

反正 - 这工作:

import socket 
sock = socket.socket() 
sock.connect(('en.wikipedia.org', 80)) 
for line in (
    "GET /wiki/List_of_HTTP_header_fields HTTP/1.1", 
    "Host: en.wikipedia.org", 
    "Connection: close", 
): 
    sock.send(line + "\r\n") 
sock.send("\r\n") 

while True: 
    content = sock.recv(1024) 
    if content: 
     print content 
    else: 
     break 

编辑:由于资源/书籍/参考ence - 对于参考HTTP客户端实现,请看Python自己的httplib.py。 :)

+2

最有可能的是,缺少“\ r \ n”是原代码中的问题;维基百科Web服务器一旦发现无效/损坏的HTTP标头,就立即关闭连接。 – modelnine 2012-04-10 07:33:12

+0

@modelnine:我认为你是对的.. :) – codersofthedark 2012-04-10 07:59:04

+0

@AKX:谢谢..。我只用\ n。而httplib.py作为参考听起来很棒! :) – codersofthedark 2012-04-10 08:00:19