[python-brasil] Como abrir uma página web passando parâmetros via POST?

1,986 views
Skip to first unread message

jgbalb

unread,
Apr 2, 2008, 9:35:53 AM4/2/08
to python...@yahoogrupos.com.br
Pessoal,

tenho o seguinte código:

import urllib, urllib2
url = 'http://uma.url.qualquer'
headers = {'User-Agent': 'Python'}
values = {'solution': 'foo', 'submit': 'ok'}
# dados do form
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
html = urllib2.urlopen(req).read()


porém a última linha:

html = urllib2.urlopen(req).read()

faz com que a variável 'html' receba a página de resultado que
recebeu os valores via POST. Acontece que preciso que a
página de resultado que recebeu os valores via POST seja vista em um
browser pelo usuário. Esta página precisa ser vista e não
armazenada...

Agradeço ajuda antecipadamente,

João


------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Italo Maia

unread,
Apr 2, 2008, 3:32:53 PM4/2/08
to python...@yahoogrupos.com.br
Tenta o mechanize cara http://wwwsearch.sourceforge.net/mechanize/

Em 02/04/08, jgbalb <jgb...@yahoo.com.br> escreveu:


>
> Pessoal,
>
> tenho o seguinte código:
>
> import urllib, urllib2
> url = 'http://uma.url.qualquer'
> headers = {'User-Agent': 'Python'}
> values = {'solution': 'foo', 'submit': 'ok'}
> # dados do form
> data = urllib.urlencode(values)
> req = urllib2.Request(url, data, headers)
> html = urllib2.urlopen(req).read()
>
> porém a última linha:
>
> html = urllib2.urlopen(req).read()
>
> faz com que a variável 'html' receba a página de resultado que
> recebeu os valores via POST. Acontece que preciso que a
> página de resultado que recebeu os valores via POST seja vista em um
> browser pelo usuário. Esta página precisa ser vista e não
> armazenada...
>
> Agradeço ajuda antecipadamente,
>
> João
>
>
>

--
"A arrogância é a arma dos fracos."

===========================
Italo Moreira Campelo Maia
Ciência da Computação - UECE
Desenvolvedor WEB
Programador Java, Python

Meu blog ^^ http://eusouolobomal.blogspot.com/

===========================


[As partes desta mensagem que não continham texto foram removidas]

Vinícius de Figueiredo Silva

unread,
Apr 2, 2008, 5:38:01 PM4/2/08
to python...@yahoogrupos.com.br
2008/4/2 jgbalb <jgb...@yahoo.com.br>:

>
> Pessoal,
>
> tenho o seguinte código:
>
> import urllib, urllib2
> url = 'http://uma.url.qualquer'
> headers = {'User-Agent': 'Python'}
> values = {'solution': 'foo', 'submit': 'ok'}
> # dados do form
> data = urllib.urlencode(values)
> req = urllib2.Request(url, data, headers)
> html = urllib2.urlopen(req).read()
>
> porém a última linha:
>
> html = urllib2.urlopen(req).read()
>
> faz com que a variável 'html' receba a página de resultado que
> recebeu os valores via POST. Acontece que preciso que a
> página de resultado que recebeu os valores via POST seja vista em um
> browser pelo usuário. Esta página precisa ser vista e não
> armazenada...
>
> Agradeço ajuda antecipadamente,
>
> João

import urllib, urllib2, webbrowser

url = "http://p.oitobits.net/add"
values = { 'code': "print Hello Joao" }
data = urllib.urlencode(values)
request = urllib2.Request(url, data)
response = urllib2.urlopen(request)
webbrowser.open_new(response.geturl())

;)

--
Vinícius.
personal site - http://vinicius.oitobits.net
gaming blog - http://www.oitobits.net

Conrado PLG

unread,
Apr 3, 2008, 10:21:24 AM4/3/08
to python...@yahoogrupos.com.br
2008/4/3 Luciano Ramalho <ram...@gmail.com>:
> 2008/4/2 jgbalb <jgb...@yahoo.com.br>:

> > página de resultado que recebeu os valores via POST seja vista em um
> > browser pelo usuário. Esta página precisa ser vista e não
> > armazenada...
> >
>
> Então você tem que retornar o valor da variável html para o seu
> usuário. No Zope isso normalmente se faz assim:
>
> return html
>
> Qual é a dificuldade?

Pelo o que eu entendi, o Luciano precisa de algo para salvar o html e
abrir num browser.

Para isso, é só escrever o conteúdo da variável html num arquivo

f = open('resposta.html', 'w')
f.write(html)
f.close()

E daí abrir o "resposta.html" num browser. Aí vai depender do sistema
operacional que você estiver usando.

Rafael Barbolo Lopes

unread,
Apr 4, 2008, 3:39:37 PM4/4/08
to python...@yahoogrupos.com.br
Tenta o seguinte:

Coloca o seguinte código no começo:

import urllib, urllib2
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)

url = "http://www.url.com.br"

# Seta os parametros a serem enviados, exemplo:
values = {'pass':'senha','usuario':'nome'}
data = urllib.urlencode(values)
req = urllib2.Request(url,data)

# abre a página com o post
response = urllib2.urlopen(req)
# le a pagina
page = response.read()
print "Página lida:\n",page
# le a url da pagina
new = response.geturl()
print "Url da página:\n",new

Se isto não funcionar, verifica a saída do programa e manda pra cá, porque
aí dá pra ajudar mais.

Abraços


2008/4/4 jgbalb <jgb...@yahoo.com.br>:

> Rafael,
>
> o login no site opera com cookies, sim. Coloquei as linhas que
> você sugeriu:
>
>
> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
> urllib2.install_opener(opener)
>
> antes da linha:
>
> html = urllib2.urlopen(req).read()
>
> que é a linha de código que faz a chamada da página que recebe os
> parametros via POST (e também trabalha com cookies). Mas não
> funcionou. O que pode ter acontecido?
>
> João
>
> ----------------------------------------------------------
>
> --- Em python...@yahoogrupos.com.br<python-brasil%40yahoogrupos.com.br>,
> "Rafael Barbolo Lopes"
> <barbolo@...> escreveu
> >
> > Dependendo do que você quer fazer, você precisa habilitar e
> armazenar o
> > recebimento de cookies.
> > Por exemplo, se você está realizando login em um site, então talvez
> ele
> > retorne um cookie.
> >
> > Se quiser permitir armazenamento de cookies, basta inserir o
> seguinte código
> > antes de realizar as chamadas de abrir página:
> >
> > opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
> > urllib2.install_opener(opener)
> >
> >
> > 2008/4/3 Paul Eipper <lkraider@...>:
> >
> > > Em 03/04/08, jgbalb<jgbalb@... <jgbalb%40yahoo.com.br>>
> > > escreveu:
> > >
> > > > Vinicius,
> > > >
> > > > coloquei o seu código em um arquivo python externo, chamei-o
> > > > através de um External Method e o mesmo não funcionou! Você
> teria
> > > > idéia de qual seria o problema?
> > > >
> > > > João
> > >
> > > João, leia os emails do Luciano Ramalho.
> > >
> > > Aos outros, ele não quer abrir o navegador, ele quer servir o
> > > resultado através do Zope.
> > >
> > > --
> > > Paul Eipper
> > >
> > >
> >
> >
> >
> > --
> > .:: Rafael Barbolo Lopes ::.
> > http://barbolo.polinvencao.com/


> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
>
>

--
.:: Rafael Barbolo Lopes ::.
http://barbolo.polinvencao.com/


[As partes desta mensagem que não continham texto foram removidas]

Leonardo Santagada

unread,
Apr 4, 2008, 9:19:52 PM4/4/08
to python...@yahoogrupos.com.br

On 04/04/2008, at 22:05, rui wrote:
> Galera, posso estar aconselhando (não tô com tempo para ler todas
> threads).
> Mas o twill pode resolver o problema, não ? :
>
>
> http://twill.idyll.org/


As pessoas deviam tomar o tempo ao menos pra não fazer top post...

Usar o twill pode ser uma boa idéia (apesar do top post :). Agora a
minha dúvida é como o Luciano e o Paul Eipper inferiram q o cara
precisa disso no zope? Eu não achei info nenhuma sobre isso nos emails.

De qualquer forma, se tu usar o twill (ou fazer malabarismos com a
urllib2) no fim tu vai ter um resultado de html e não vai mostrar isso
num browser sem fazer o que os comentários sobre gravar num arquivo o
resultado e criar um uri pra ele e mandar pro browser usando o modulo
webbrowser.

A minha sugestão seria usar o twill (leia mais sobre ele no link
acima) para entrar no site e fazer o post e tudo mais q precisar e
depois usar as dicas de gravar num arquivo e com o webbrowser abrir no
navegador do usuario.

[]'s
--
Leonardo Santagada

Reply all
Reply to author
Forward
0 new messages