Hilfe bei cURL in Python

Ich muss eine Anfrage an einen Server senden. In der API-Dokumentation der Website gibt es dieses Beispiel, das cURL in PHP verwendet:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://api.website.com'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "request=$wrapper"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); ; $data = curl_exec($ch); curl_close($ch); 

Aber meine App ist mit Python fertig, also habe ich versucht, so etwas zu schreiben, aber dieser Code funktioniert nicht:

 req = urllib2.Request(url, formatted) response = urllib2.urlopen(req) html = response.read() print html+"\n\n" 

Kannst du mir helfen, eine funktionierende Umwandlung eines PHP CURL Programms in Python zu schreiben?

Vielen Dank!!

4 Solutions collect form web for “Hilfe bei cURL in Python”

Curl ist auch für Python: http://pycurl.sourceforge.net/

Das Beispiel könnte in Python und pycurl wie folgt übersetzt werden:

 import pycurl c = pycurl.Curl() c.setopt(pycurl.URL, "http://api.website.com") c.setopt(pycurl.POST, 1) c.setopt(pycurl.POSTFIELDS, "request=%s" % wrapper) import StringIO b = StringIO.StringIO() c.setopt(pycurl.WRITEFUNCTION, b.write) c.perform() c.close() data = b.getvalue() 

Ihr Python-Code mit urllib2 sieht ok aus, es sollte funktionieren. Wahrscheinlich gibt es einen Irrtum in etwas anderem, das du nicht erwähnt hast. Können Sie bitte mehr spezifisch sein?

Wenn du deinen Code nimmst, sollte das eigentlich funktionieren.

  import urllib import urllib2 url = 'http://api.website.com/' values = {'some_key':'some_value'} data = urllib.urlencode(values) req = urllib2.Request(url, data) response = urllib2.urlopen(req) page = response.read() print page + '\n\n' 

Was ist der Fehler, den du bekommst?

Verwenden Sie einen Paket-Sniffer, um herauszufinden, ob cURL User-Agent-Informationen sendet. Wenn dies der Fall ist und der Service diese Informationen erwartet, verwenden Sie die add_header () – Methode auf Ihrer Anfrage (von urllib2 Dokumentation, unten auf Seite):

 import urllib2 req = urllib2.Request('http://api.website.com/') # Your parameter encoding here req.add_header('User-agent', 'Mozilla/5.0') r = urllib2.urlopen(req) # Process the response 

Es ist ziemlich peinlich, aber … das einzige Problem mit meinem Code, der urllib verwendet und urllib2 ist … dass dieser Code ein GET und kein POST !!!

Hier ist mein Scan mit Wireshark:

1- mit urllib und urllib2

 Hypertext Transfer Protocol GET / HTTP/1.1\r\n [Expert Info (Chat/Sequence): GET / HTTP/1.1\r\n] [Message: GET / HTTP/1.1\r\n] [Severity level: Chat] [Group: Sequence] Request Method: GET Request URI: / Request Version: HTTP/1.1 Accept-Encoding: identity\r\n Host: api.apptrackr.org\r\n Connection: close\r\n User-Agent: Python-urllib/2.6\r\n \r\n 

2- mit PyCurl

 Hypertext Transfer Protocol POST / HTTP/1.1\r\n [Expert Info (Chat/Sequence): POST / HTTP/1.1\r\n] [Message: POST / HTTP/1.1\r\n] [Severity level: Chat] [Group: Sequence] Request Method: POST Request URI: / Request Version: HTTP/1.1 User-Agent: PycURL/7.19.5\r\n Host: api.website.com\r\n Accept: */*\r\n Content-Length: 365\r\n [Content length: 365] Content-Type: application/x-www-form-urlencoded\r\n \r\n Line-based text data: application/x-www-form-urlencoded [truncated] request=%7B%22enc_key%22%3A%22o37vOsNetKgprRE0VsBYefYViP4%2ByB3pjxfkfCYtpgiQ%2ByxONgkhhsxtqAwaXwCrrgx%2BPDuDtMRZNI1ez//4Zw%3D%3D%22%2C%22format%22%3A%22RSA_RC4_Sealed%22%2C%22profile%22%3A%22Ldn%22%2C%22request%22%3A%22bQ%2BHm/ 

So dass der Code funktioniert, aber es ist nicht richtig für mich, weil ich einen POST brauche, aber ich werde es vorziehen, NICHT PyCurl zu verwenden. Irgendeine Idee?

Vielen Dank!!

  • Wie kann ich mich bei facebook mit python (requests / urllib3) anmelden?
  • HTTP-POST-Anforderung erstellen
  • "SyntaxError: Nicht-Keyword-Arg nach Schlüsselwort arg" Fehler in Python bei Verwendung von requestests.post ()
  • Senden Sie json an die Client-Seite zurück
  • Python einfach wsgi datei hochladen skript - was ist falsch
  • Postanforderung mit multipart / form-data in appengine python funktioniert nicht
  • Python senden pOST mit header
  • Python: Senden und Empfangen großer Dateien über POST mit cherrypy
  • Machen Sie eine http-POST-Anfrage zum Hochladen einer Datei mit python urllib / urllib2
  • Wie bekomme ich Github Webhooks in Python
  • Looping durch eine Liste von Tupeln, um eine POST-Anfrage mit jedem Tupel zu machen
  • Python ist die beste Programmiersprache der Welt.