Python: Usando urllib2
O urllib2 é um módulo do Python que define funções e classes(Objetos) que manipulam URL(s), seja ela uma URL simples baseado no protocolo HTTP, autenticação Digest, envio de dados GET e POST download de arquivos, cookies, sessão etc.
Para a manipulação de dados pela internet ou recursos para um servidor em intranet, a utilização deste módulo é essencial para o funcionamento de sua aplicação.
A versão mais recente de Python 3.x urllib2 foi dividida em varios outros módulos como urllib.request e urllib.error
Abaixo algumas classes e métodos utilizados nos exemplos:
- urllib2.urlopen(url[, data][, timeout])
- urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
- urllib2.read()
- urllib2.close()
- urllib2.URLError
- urllib2.HTTPError
- urllib.urlencode(query[, doseq])
- re.search(string[, pos[, endpos]])
- os.path.exists(path)
- os.system(command)
- os.fchmod(fd, mode)
Abaixo segue alguns exemplos da utilização deste módulo.
Requisitando Conteúdo HTTP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/usr/bin/env python # -*- coding: utf-8 -*- from urllib2 import URLError from urllib2 import HTTPError import urllib2 try: request = urllib2.Request("http://www.nacaolivre.com.br/") # Abre a conexão fd = urllib2.urlopen(request) # Efetua a leitura do conteúdo. content = fd.read() fd.close() print(content) except HTTPError, e: print("Ocorreu um erro ao requisitar o conteúdo do servidor!\n") print("Cod.: ", e.code) except URLError, e: print("URL inválido!\n") print("Mensagem: ", e.reason) |
Enviando Dados HTTP GET
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #!/usr/bin/env python # -*- coding: utf-8 -*- from urllib2 import URLError from urllib2 import HTTPError import urllib2 import urllib try: # Objeto contendo os dados para envio ao servidor. data = urllib.urlencode({ "name": "Teste t. Teste", "address": "Teste, 555", "country": "Brasil", "phone": "(55) 5555-5555", }) url = "http://www.nacaolivre.com.br/index.php" % data f = urllib2.urlopen(url) contents = f.read() f.close() print contents except HTTPError, e: print("Ocorreu um erro ao requisitar o conteúdo do servidor!\n") print("Cod.: ", e.code) except URLError, e: print("URL inválido!\n") print("Mensagem: ", e.reason) |
Enviando Dados HTTP POST
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #!/usr/bin/env python # -*- coding: utf-8 -*- from urllib2 import URLError from urllib2 import HTTPError import urllib2 import urllib try: # Objeto contendo os dados para envio ao servidor. data = urllib.urlencode({ "name": "Teste t. Teste", "address": "Teste, 555", "country": "Brasil", "phone": "(55) 5555-5555", }) url = "http://www.nacaolivre.com.br/index.php" # A grande diferença em relação a envio de dados GET está aqui # o segundo parametro do método. f = urllib2.urlopen(url, data) contents = f.read() f.close() print contents except HTTPError, e: print("Ocorreu um erro ao requisitar o conteúdo do servidor!\n") print("Cod.: ", e.code) except URLError, e: print("URL inválido!\n") print("Mensagem: ", e.reason) |
Download de Arquivo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #!/usr/bin/env python # -*- coding: utf-8 -*- from urllib2 import URLError from urllib2 import HTTPError import urllib2 import os import re # Abre a página para verificação dos links necessários para efetuar download dos arquivos # de instalação do wenmin, virtualmin e thema request = urllib2.Request("http://www.webmin.com/download.html") fd = urllib2.urlopen(request) # Read the results back. s1 = fd1.read() link_webmin = re.search("(http\:\/\/prdownloads\.sourceforge\.net\/webadmin\/webmin).*?(all.deb)", s1) # Encerra o descritor de arquivo fd1, fd2 fd1.close() # Verifica a existencia do arquivo webmin para download if(not link_webmin.group(0)): print("Arquivo Webmin: não encontrado para download") else: print("Arquivo Webmin: " + link_webmin.group(0) + "[ encontrado ]\n"); print("Efetuando Download: " + link_webmin.group(0) + "... \n"); if(not os.path.exists("downloads/" + os.path.basename(link_webmin.group(0)))): os.system("wget -P downloads " + link_webmin.group(0)) if(os.path.exists("downloads/" + os.path.basename(link_webmin.group(0)))): os.chmod("downloads/" + os.path.basename(link_webmin.group(0)), 0777) print(" [ ok ]\n") print(os.path.basename(link_webmin.group(0))) |
Muitooo bom o site mano ushaushsa principalmente essa postagem.
Ajuda muito pra fazer brute force =)