Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [Python] вопрос/ответ. (https://forum.antichat.xyz/showthread.php?t=102344)

Vid0k 02.04.2009 16:22

Цитата:

Сообщение от t4Nk
mes += "Connection: close\r\n\r\n"

sock.send(mes)

надо пойти поспать=\
но все равно не пашет(

eLWAux 02.04.2009 16:34

PHP код:

# -*- coding: cp1251 -*-

import sys,socket

socket.socket(socket.AF_INETsocket.SOCK_STREAM)
s.connect(("www.google.ru"80))
print 
'+'

mes   "GET /index.html HTTP/1.1\r\n"\
        
"Host: www.google.ru\r\n\r\n"

s.send(mes)
result s.recv(10240)
s.close()
print 
result 

проверил, все работает!

з.ы.: если тебе нужна полностью страница, и не нужен header ответа, используй urllib:
PHP код:

import urllib
page 
urllib.urlopen("http://google.ru").read()
print 
page 


Vid0k 02.04.2009 16:46

спасибо,вот конечный результат забирает всю страницу, а не только первые 1024 байта
PHP код:

 # -*- coding: cp1251 -*-

import sys,socket

socket.socket(socket.AF_INETsocket.SOCK_STREAM)
s.connect(("www.google.ru"80))
print 
'+'

mes  "GET / HTTP/1.1\r\n"
mes += "Host: www.google.ru\r\n"
mes += "User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5\r\n"
mes += "Accept: text/html\r\n"
mes += "Connection: close\r\n\r\n"

s.send(mes)
buff ""
result ""
while 1:
    
buff s.recv(1024)
    if 
buff:
        
result += buff
    
else:
        break
s.close()
print 
result 


eLWAux 02.04.2009 16:52

Vid0k, в некоторих случаях твой скрипт будет виснуть.

вот:
PHP код:

    def sendit(sock,packet='',timeout=1):
        
import time
        
if (packet!=''):
            
self.sock.send(packet)
        
self.sock.setblocking(0)
        
total_data=[]
        
data=''
        
begin=time.time()
        while 
1:
            if 
total_data and time.time()-begin>timeout:
                break
            
elif time.time()-begin>timeout*2:
                break
            try:
                
data=self.sock.recv(1024)
                if 
data:
                    
total_data.append(data)
                    
begin=time.time()
                else:
                    
time.sleep(0)
            
except:
                
pass
        
return ''.join(total_data

и испозуеш:
PHP код:

socket.socket(socket.AF_INETsocket.SOCK_STREAM)
s.connect(("www.google.ru"80)) 
result sendit(s,"GET / HTTP/1.1\r\nHost: google.ru\r\n\r\n")
print 
result 

з.ы.: повторяюсь, но для получения страници лучше использовать уже готовую urllib

inlanger 02.04.2009 17:34

Vid0k, с twill твой код будет выглядеть так:

Цитата:

go('http://google.com')
show()
Это - переход на страницу и вывод полученной страницы на экран(а можно и в переменную)

Vid0k 02.04.2009 17:37

Цитата:

Сообщение от inlanger
Vid0k, с twill твой код будет выглядеть так:



Это - переход на страницу и вывод полученной страницы на экран(а можно и в переменную)

не спасибо...
я люблю велосипеды...:)

login999 02.04.2009 17:44

Цитата:

Сообщение от Vid0k
спасибо,вот конечный результат забирает всю страницу, а не только первые 1024 байта
PHP код:

 # -*- coding: cp1251 -*-

import sys,socket

socket.socket(socket.AF_INETsocket.SOCK_STREAM)
s.connect(("www.google.ru"80))
print 
'+'

mes  "GET / HTTP/1.1\r\n"
mes += "Host: www.google.ru\r\n"
mes += "User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5\r\n"
mes += "Accept: text/html\r\n"
mes += "Connection: close\r\n\r\n"

s.send(mes)
buff ""
result ""
while 1:
    
buff s.recv(1024)
    if 
buff:
        
result += buff
    
else:
        break
s.close()
print 
result 


Честно говоря, я не могу понять, зачем нужно было изьебыватся, чтоб получить страницу именно на сокетах, мне интересно, что ты подразумевал под "Активная работа с заголовками" между прочим, модификацию заголовков я делаю через urllib2, я ж написал, что сокеты целесообразно использовать только в одном случае - если необходимо ПОЛУЧИТЬ ЧАСТЬ заголовка.Примером такого изьебоса я могу считать свой сканнер директорий([NDC] 12 BDS), который получает 12 байт из заголовка и обрывает соединение, в этом случае целесообразно было писать его на сокетах (ИМХО). Во всех остальных случаях я не вижу необходимости юзать сокеты на питоне, отлично справляются и стандартные либы. В качестве исключения могу сказать только то, что над server-side приложениями я не трудился и как они будут себя вести при огромных нагрузках я не знаю, с клиентской частью у мну ни разу никаких напрягов не было. Но в пользу server-side приложений говорят Twisted, Django, Plone, Turbo Gears, и т.д.

login999 02.04.2009 17:47

Цитата:

Сообщение от inlanger
Vid0k, с twill твой код будет выглядеть так:



Это - переход на страницу и вывод полученной страницы на экран(а можно и в переменную)

Просто - это не путь тру кодеров, труъ кодеры настолько суровые, что даже веб-приложения пишут на ассемблере

Vid0k 02.04.2009 18:05

Цитата:

Честно говоря, я не могу понять, зачем нужно было изьебыватся, чтоб получить страницу именно на сокетах, мне интересно, что ты подразумевал под "Активная работа с заголовками" между прочим, модификацию заголовков я делаю через urllib2, я ж написал, что сокеты целесообразно использовать только в одном случае - если необходимо ПОЛУЧИТЬ ЧАСТЬ заголовка.Примером такого изьебоса я могу считать свой сканнер директорий([NDC] 12 BDS), который получает 12 байт из заголовка и обрывает соединение, в этом случае целесообразно было писать его на сокетах (ИМХО). Во всех остальных случаях я не вижу необходимости юзать сокеты на питоне, отлично справляются и стандартные либы.
чо ты так напрягся?!:Dрасслабься, ну захотелось мне!)
нравится тебе твоя урл.либ вот и пиши с ней задоровье

Vid0k 02.04.2009 18:17

а и еще вопрос
при выводе строки в консоль нужно чтобы она была на месте
в перле и под виндами работало "\r" но под никсами и в питоне все время переводит на новую строчку(
как с этим бороться?
чо придется все время чистить консоль?(


Время: 22:03