2011-08-09 4 views
1

저는 파이썬에 익숙하지 않고 소켓에서 행운을 시험하고 있습니다. 그래서 나는 간단한 HTTP 클라이언트를 작성하지만 놀랍게도 파이어 폭스가 액세스 할 수있는 웹 페이지에 액세스하는 데 실패, 아직 내가 그것을 실행하면 보여줍니다파이썬 스크립트가 프록시를 통해 웹 페이지를 다운로드하지 못하는 이유는 무엇입니까?

import socket 
clientsocket= socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
clientsocket.connect(("213.229.83.205",80))#connect to proxy at given address 
print "connected to 213.229.83.205" 
sdata= """GET http://google.co.ug/ HTTP/1.1 
Host: google.co.ug 
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip, deflate 
Proxy-Connection: keep-alive 
Cookie: cookie <-- Real cookie deleted 

""" 
print "sending request" 
clientsocket.send(sdata); 
rdata=clientsocket.recv(10240) 
if not rdata: print "no data found" 
else: 
    print "receiving data !" 
    myfile=open("c:/users/markdenis/desktop/google.html","w") 
    myfile.write(str(rdata)) 
    myfile.close() 
    print "data written to file on desktop" 
clientsocket.close() 
raw_input()#system(pause) 

는 동일한 헤더를 사용 :

connected to 213.229.83.205 
sending request 
no data found 
+0

이 –

+0

는'당신은 확실히 당신의 라인 사이 헤더 후 휴식 있습니까 위의 주소에서 실행하는 glype 프록시가 \ r \ n'? 일부 서버에서는 (대부분 내 경험으로) 필요합니다. – Skurmedel

+0

urllib2를 사용하지 않는 이유는 무엇입니까? – Kracekumar

답변

5

HTTP 프로토콜은 각 헤더의 끝에 \r\n을 필요로하며 HTTP 헤더의 끝에 빈 줄을 추가로 필요로합니다. sdata 버퍼의 줄 끝 부분에 대해 명시 적으로 지정하지 않으므로 버퍼의 끝에는 \n 줄 끝 부분 만 있습니다. 윈도우, 리눅스와 OS X에서 테스트

, 확인하기 :

>>> x = "a\r\nb\r\nc\r\n" 
>>> x 
'a\\r\\nb\\r\\nc\\r\\n' 

\r\n의를 추가하고 그것에게 주사를 : 당신이 필요로하는

>>> x = """a 
b 
c""" 
>>> x 
'a\\nb\\nc\\n' 

. 버퍼에 직접 이렇게하면 그래서 그것을 분할, 당신에게 \n의 추가 세트를 얻을 것이다 :

sdata = "GET http://google.co.ug/ HTTP/1.1\r\n" 
sdata += "Host: google.co.ug\r\n" 
sdata += "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0\r\n" 
sdata += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" 
sdata += "Accept-Language: en-us,en;q=0.5\r\n" 
sdata += "Accept-Encoding: gzip, deflate\r\n" 
sdata += "Proxy-Connection: keep-alive\r\n" 
sdata += "\r\n" 
관련 문제