2016-03-26 17 views
0

Bu yüzden google kaynak kodunu yalnızca python soketleri kullanarak ve urllib gibi başka bir kütüphaneyi kullanmamaya çalışıyorum. GET isteğimin neden çalışmadığını anlamıyorum, tüm olası yöntemleri denedim. Bu benim sahip olduğum kod, oldukça küçük ve fazla detay almak istemiyorum. Sadece kaynak kodları almak için kullanılan bir protokol arıyorum. GET yöntemi olacağını varsaydım ama işe yaramıyor. Urllib.request'e benzeyen ancak yalnızca python soketleri kullanan bir yanıta ihtiyacım var. python yuvaları kullanarak html kodu nasıl edinilir

  • Ben geçerseniz

    "https://www.google.com" socket.gethostbyname() nedeniyle, getaddrinfo üzerinde başarısız olur.
  • Ayrıca python.org'dan GET isteğini denediğimde, while döngüsü hiçbir zaman bitmez.


import socket; 

s=socket.socket(); 

host=socket.gethostbyname("www.google.com"); 

port=80; 

send_buf="GET/\r\n"\ 
     "Host: www.google.com\r\n"; 

s.connect((host, port)); 

s.sendall(bytes(send_buf, encoding="utf-8")); 

data=""; 

part=None; 

while(True): 

    part=s.recv(2048); 

    data+=str(part, "utf-8"); 

    if(part==b''): 

     break; 

s.close(); 
+0

'https: // www.google.com' bir ana makine adı (bir URL) değil, bu yüzden 'gethostbyname' dersi başarısız oluyor. – larsks

+1

Python :) – Signal

cevap

2

benim için çalıştı aşağıdaki:

import socket 
s=socket.socket() 
host=socket.gethostbyname('www.google.com') 
port=80 
s.connect((host,port)) 
s.sendall("GET /\r\n") 
val = s.recv(10000) 
# Split off the HTTP headers 
val = val.split('\r\n\r\n',1)[1] 
+0

'da bir satırda birden çok ifade koymadığınız sürece noktalı virgül kullanmanıza gerek yoktur, ancak bu kaynak kodunu döndürmez, kodun tam olarak döndüğü aynı şeyi verir :) – demogorgon

+0

http başlık da ... – Alec

+0

Bunu denedim, gerçekten aradığım şey urllib.request() gibi çalışacak ve web sitesinin tam kaynağını döndürecek bir şey. Tam kaynağa sahip olan urllib kullandığımda, 302 Moved mesajını google.com'dan alıyorum. – demogorgon