Probleme mit pycurl.POSTFIELDS
Ich bin vertraut mit CURL in PHP, bin aber zum ersten mal in Python pycurl.
Ich erhalte die Fehlermeldung:
Exception Type: error
Exception Value: (2, '')
Ich habe keine Ahnung, was dies bedeuten könnte. Hier ist mein 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()
Der Fehler bezieht sich auf die Zeile ch.setopt(pycurl.POSTFIELDS, post)
InformationsquelleAutor Matt McCormick | 2010-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass Ihre pycurl-installation (oder die curl-Bibliothek) ist irgendwie beschädigt. Aus der curl-Fehler-codes-Dokumentation:
Sie müssen möglicherweise neu installieren oder neu kompilieren curl oder pycurl.
Jedoch um einen einfachen POST-request, wie du tust, können Sie tatsächlich nutzen python ' s "das urllib" anstelle von CURL:
öffnen
https://
URL, die Sie möglicherweise installieren müssen, PyOpenSSL:http://pypi.python.org/pypi/pyOpenSSL
Einige distibutions auch diese, andere bieten es als extra-Paket direkt über Ihre Lieblings-Paket-manager.
Edit: Haben Sie genannt pycurl.global_init() noch? Ich noch empfehlen, das urllib/urllib2, wo möglich, als das Skript einfach in andere Systeme.
Der Vorteil, das urllib ist, dass Sie nicht haben, um die Gabel ein externes Kommando, welches insbesondere im Falle einer web-Anwendung, ist eine gute Menge an Leistung zu erhöhen. Darüber hinaus
os.system()
nennen variiert, was es gibt basiert auf dem Betriebssystem; wenn Sie zu Linux gewechselt könnte es nicht geben den gleichen Wert zurück.urllib
/urllib2
können Sie auch Lesen Sie die Antwort von der website zu vereinfachen. Und schließlich, wenn Sie wollten, laden Sie Ihre Anwendung auf einem host, der nicht über curl (oder eine wie bei Goog le appengine, die unterstützt keine externe Prozesse) würden Sie verwenden müssenurllib
oder ähnliches.InformationsquelleAutor Crast
Ich mag das:
InformationsquelleAutor mapcuk
Ich weiß, dies ist eine alte post, aber ich verbrachte gerade meinen morgen versuchen, die Spur der gleiche Fehler. Es stellt sich heraus, dass es ein bug in pycurl das war Feste in 7.16.2.1 , verursacht setopt() zu brechen auf 64-bit-Maschinen.
InformationsquelleAutor Sean McSomething