PHP: # -*- coding: cp1251 -*- import sys,socket s = socket.socket(socket.AF_INET, socket.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
спасибо,вот конечный результат забирает всю страницу, а не только первые 1024 байта PHP: # -*- coding: cp1251 -*- import sys,socket s = socket.socket(socket.AF_INET, socket.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
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: s = socket.socket(socket.AF_INET, socket.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
Vid0k, с twill твой код будет выглядеть так: Это - переход на страницу и вывод полученной страницы на экран(а можно и в переменную)
Честно говоря, я не могу понять, зачем нужно было изьебыватся, чтоб получить страницу именно на сокетах, мне интересно, что ты подразумевал под "Активная работа с заголовками" между прочим, модификацию заголовков я делаю через urllib2, я ж написал, что сокеты целесообразно использовать только в одном случае - если необходимо ПОЛУЧИТЬ ЧАСТЬ заголовка.Примером такого изьебоса я могу считать свой сканнер директорий([NDC] 12 BDS), который получает 12 байт из заголовка и обрывает соединение, в этом случае целесообразно было писать его на сокетах (ИМХО). Во всех остальных случаях я не вижу необходимости юзать сокеты на питоне, отлично справляются и стандартные либы. В качестве исключения могу сказать только то, что над server-side приложениями я не трудился и как они будут себя вести при огромных нагрузках я не знаю, с клиентской частью у мну ни разу никаких напрягов не было. Но в пользу server-side приложений говорят Twisted, Django, Plone, Turbo Gears, и т.д.
Просто - это не путь тру кодеров, труъ кодеры настолько суровые, что даже веб-приложения пишут на ассемблере
чо ты так напрягся?!расслабься, ну захотелось мне!) нравится тебе твоя урл.либ вот и пиши с ней задоровье
а и еще вопрос при выводе строки в консоль нужно чтобы она была на месте в перле и под виндами работало "\r" но под никсами и в питоне все время переводит на новую строчку( как с этим бороться? чо придется все время чистить консоль?(
Наверное, ты пишешь: Code: print stroka + "\r" когда надо Code: print stroka + "\r"[COLOR=Red],[/COLOR]
Народ если вы не в теме, просьба не отписываться тут... Запись с сокетами просто расмешила... На что вам кортежи и словари даны?, для чего создавались тонкости питона? Также как и login999 уже сказал, urllib используют для этого, вообще сокеты в питоне, для работы на уровне TCP/IP, а для HTTP, FTP и так далее есть готовые либы, и не стоит изобретать херню...
на самом деле тут часто приколы бывает проще) как то сталкивался, но было это на C. в общем программу надо запускать из корня, а не из той папки, в которой она лежит. то есть указываем полный путь)
Вопрос:Кто что может мне подсказать по поводу цветов текста и шрифтов в программах на питоне.Хочу,например,какую либо фразу сделать в таком же стиле как в программе SmartSIS в главном меню.Знает ли кто про то как представить стандартный текст в питоне в другом виде,т.е. немного его преукрасив?
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html Code: #! /usr/bin/python print "\033[34mThis is blue\033[0m"
Народ очень срочно надо, короче встала проблема, я не могу понять как так cделать Нужно об]явить массив, записать все это в фаил, и найти сумму квадратов N чисел с конца.
А зачем запись в файл ? Code: a=[] # Обьявляем массив b = "abcdef" # Строка с данными , которые будут заноситься в массив for element in b: # Для каждого элемента в b a.append(element) # Собственно само добавление элемента в массив with open ("out.txt", "a") as out:# Тут запись в файл, если захочешь :) for element in a : out.write(element + "\n") with open ("out.txt", "a") as inpt:# Так можно заполнить массив из файла, если файл можно прочитать построчно for element in inpt: a.append(element[:-1])# Обрати внимание на [:-1]# Это значит, что от каждой строки из файла будет отнят последний символ (обычно это перенос строки, но файл должен заканчиваться пустой строкой !) last = a.pop() # Так происходит взятие последнего элемента массива, следовательно для N элементов можно сделать так: for x in xrange(N): #для каждого x в диапазоне N(число, обязательно!) a.pop(x) #Берем значение из массива c его последующим удалением print a # Делаем с a то что хотим P.S. .pop() Берет значение из массива, а потом его удаляет, т.е. после .pop() этого значения в массиве уже не будет, помни об этом P.P.S. Если бы задача была более конкретно описана, то мог бы посоветовать что-то ближе к практике, а так то это чисто фонарный набор - я лично пользуюсь такими конструкциями постоянно, и для этих действий то нужно хоть немного мануал почитать P.P.S. а вообще то это элементарная задача =\ За тебя я ее делать не буду