Python socket向百度发送http长连接请求 并做搜索


Python socket向百度发送http长连接请求 并做搜索

  1. #coding=gbk  
  2. ''''' 
  3. socket 给百度发送http请求 
  4.  
  5. 连接成功后,发送http的get请求,所搜索功能 
  6.  
  7. '''  
  8. import socket  
  9. import sys  
  10. import time  
  11. if __name__=='__main__':  
  12.     #创建套接字  
  13.     try :  
  14.         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
  15.     except socket.eorror,e:  
  16.         print 'socket false:%s'%e  
  17.     print 'socket ...'  
  18.      
  19.     #连接百度ip  
  20.     try :  
  21.         sock.connect(('220.181.111.148',80))  
  22.     except socket.error,e:  
  23.         print 'connect false %s'%e  
  24.         sock.close()  
  25.     print 'connect ...'  
  26.      
  27.     #发送百度首页面请求并且保持连接  
  28.     try :  
  29.         print 'send start...'  
  30.         str='GET / HTTP/1.1\r\nHost:www.baidu.com\r\nConnection:keep-alive\r\n\r\n'  
  31.         sock.send(str)  
  32.     except socket.eorror,e:  
  33.         print 'send false'  
  34.         sock.close()  
  35.      
  36.     data=''  
  37.     data = sock.recv(1024)  
  38.     while (1):       '''''如何判断数据接收完毕,在发送http 最前端, 
  39.                         包含发送数据文件大小属性Content-Length, 
  40.                         用字符匹配方式取得文件大小, 
  41.                         同过大小判断是否接收完毕。 
  42.                         '''  
  43.         print data  
  44.         beg = data.find('Content-Length:',0,len(data))  
  45.         end = data.find('Content-Type:',0,len(data))  
  46.         print beg  
  47.         print end  
  48.         if(beg == end):  
  49.             print 'connecting closed'  
  50.             break  
  51.         num = long(data[beg+16:end-2])  
  52.         print num  
  53.         nums = 0  
  54.         while (1):  
  55.             data=sock.recv(1024)  
  56.             print data  
  57.             nums +=len(data)  
  58.             if(nums >= num):  
  59.                 break  
  60.         word = raw_input('please input your word----->')  
  61.         str='''''GET /s?wd=''' + word + ''''' HTTP/1.1 
  62. Host:www.baidu.com 
  63. Connection: Keep-Alive 
  64.  
  65. '''  
  66.         print str  
  67.         sock.send(str)  
  68.         data = ''  
  69.         data = sock.recv(1024)     
  70.     sock.close()  
  71.     print data  

相关内容