La difficulté avec pycurl.POSTFIELDS
Je suis familier avec CURL en PHP, mais je suis de l'utiliser pour la première fois en Python avec pycurl.
Je reçois l'erreur:
Exception Type: error
Exception Value: (2, '')
Je n'ai aucune idée de ce que cela pourrait signifier. Voici mon code:
data = {'cmd': '_notify-synch',
'tx': str(request.GET.get('tx')),
'at': paypal_pdt_test
}
post = urllib.urlencode(data)
b = StringIO.StringIO()
ch = pycurl.Curl()
ch.setopt(pycurl.URL, 'https://www.sandbox.paypal.com/cgi-bin/webscr')
ch.setopt(pycurl.POST, 1)
ch.setopt(pycurl.POSTFIELDS, post)
ch.setopt(pycurl.WRITEFUNCTION, b.write)
ch.perform()
ch.close()
L'erreur est en se référant à la ligne ch.setopt(pycurl.POSTFIELDS, post)
OriginalL'auteur Matt McCormick | 2010-01-06
Vous devez vous connecter pour publier un commentaire.
Il semblerait que votre pycurl de l'installation (ou curl bibliothèque) est endommagé en quelque sorte. De la boucle des codes d'erreur de la documentation:
Vous aurez éventuellement besoin de ré-installer ou de recompiler curl ou pycurl.
Cependant, pour faire une simple requête POST comme vous le faites, vous pouvez réellement utiliser python "urllib" au lieu de CURL:
pour ouvrir un
https://
URL, vous devrez peut-être installer PyOpenSSL:http://pypi.python.org/pypi/pyOpenSSL
Certains distibutions comprennent cela, d'autres comme un paquet supplémentaire à travers votre gestionnaire de paquets préféré.
Edit: Avez-vous appelé pycurl.global_init() encore? Je continue de recommander urllib/urllib2, si possible, votre script sera plus facile de les déplacer vers d'autres systèmes.
L'avantage de urllib, c'est que vous n'avez pas à fourche d'une commande externe, qui, surtout dans le cas d'une application web, c'est un bon montant de l'augmentation de la performance. En outre, la
os.system()
appel varie sur de quoi il en retourne basé sur le système d'exploitation; si vous avez déménagé à Linux, il pourrait ne pas donner la même valeur de retour.urllib
/urllib2
vous permet également de lire la réponse à partir du site web plus facile. Et enfin, si vous souhaitez télécharger votre application sur un ordinateur hôte qui n'ont pas de boucle (ou un comme Goog le appengine qui ne prend pas en charge tous les processus externes), vous devrez utiliserurllib
ou similaire.OriginalL'auteur Crast
Je fais comme ça:
OriginalL'auteur mapcuk
Je sais que c'est un vieux post mais je viens de passer ma matinée à essayer de ce même message d'erreur. Il s'avère qu'il y a un bug dans pycurl qui a été fixe dans 7.16.2.1 qui a causé setopt() pour briser sur les ordinateurs 64 bits.
OriginalL'auteur Sean McSomething