2011-06-25 2 views
1

Bonjour à tous (premier article ici). J'essaie d'envoyer des données à une page Web. Cette page Web demande deux champs (un fichier et une adresse e-mail) si tout va bien, la page web renvoie une page disant "tout va bien" et envoie un fichier à l'adresse e-mail fournie. J'exécute le code ci-dessous et je n'ai rien dans mon compte e-mail.impossible d'envoyer des données en utilisant urllib et urllib2 (python)

import urllib, urllib2 

params = urllib.urlencode({'uploaded': open('file'),'email': '[email protected]'}) 
req = urllib2.urlopen('http://webpage.com', params) 
print req.read() 

la commande d'impression me donne le code de la page d'accueil (je suppose qu'il devrait plutôt donner le code de la page « tout est ok »).

Je pense (basé sur google search) que le module affiche devrait faire l'affaire mais j'ai besoin de garder les dépendances au minimum, donc je voudrais une solution en utilisant des bibliothèques standard (si c'est possible).

Merci d'avance.

+0

Avez-vous manqué des en-têtes? 'Type de contenu: application/x-www-form-urlencoded' –

+0

Veuillez ne pas poster votre solution dans la question. Vous * pouvez * et * devriez * répondre à votre propre question, si aucune des réponses ci-dessous n'a aidé. –

+0

Désolé à ce sujet. Je viens de réparer. – aloctavodia

Répondre

3

Merci à tous pour vos réponses. Je résous mon problème en utilisant la bibliothèque de mécanisation.

import mechanize 

br = mechanize.Browser() 
br.open('webpage.com') 

email='[email protected]' 

br.select_form(nr=0) 
br['email'] = email 
br.form.add_file(open('filename'), 'mime-type', 'filename')  
br.form.set_all_readonly(False) 
br.submit() 
+0

Vous pouvez réellement accepter cela comme une réponse, aussi –

1

Ce site pourrait vérifier Referer, User-Agent et Cookies.

Pour gérer tout cela, utilisez urllib2.OpenerDirector que vous pouvez obtenir par urllib2.build_opener.

# Cookies handle 
cj = cookielib.CookieJar() 
CookieProcessor = urllib2.HTTPCookieProcessor(cj) 
# Build OpenerDirector 
opener = urllib2.build_opener(CookieProcessor) 
# Valid User-Agent from Firefox 3.6.8 on Ubuntu 10.04 
user_agent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8' 
# Referer says that you send request from web-site title page 
referer = 'http://webpage.com' 
opener.addheaders = [ 
    ('User-Agent', user_agent), 
    ('Referer', referer), 
    ('Accept-Charset', 'utf-8') 
] 

Ensuite, préparez les paramètres avec urlencode et envoyer la demande par opener.open(params)

Documentation pour Python 2.7: cookielib, OpenerDirector

+0

merci pour votre réponse, mais votre solution ne résout pas mon problème. Je pense (je viens de réaliser) que mon problème a quelque chose à voir avec le fait que la page a besoin des données à encoder comme "multipart/form-data" – aloctavodia

+0

OK. Ensuite, vous pouvez utiliser ce qui a été conseillé: [MultiPartPostHandler] (http://peerit.blogspot.com/2007/07/multipartposthandler-doesnt-work-for.html). C'est quelques lignes de code donc ce n'est pas vraiment une dépendance. Considérez juste votre propre classe que vous avez écrite hier pour le téléchargement de fichier pratique :) – Kirill

+0

J'essaie d'utiliser cette solution (avec quelques modifications mineures, mais ne fonctionne toujours pas correctement) [link] http://stackoverflow.com/questions/680305/using-multipartposthandler-à-post-form-data-with-python/681182 # 681182 – aloctavodia

Questions connexes