Http anfragen: von urllib2 auf anfragen python 2.7

Ich habe versucht, alle meine http-Anfragen in einem Skript von der Verwendung von urllib1 / 2 zu verwenden, um Anfragen zu verwenden, um erweiterte Anfragen zu machen.

Klar, das versage ich nicht.

Kann mir jemand den Unterschied zwischen:

import urllib,urllib2 data=urllib.urlencode(params) req=urllib2.Request("http://play.pokemonshowdown.com/action.php",data,{ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)' }) response=urllib2.urlopen(req) response.read() 

Und :

 import requests r=requests.post("http://play.pokemonshowdown.com/action.php",params=params,headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)' }) r.text 

?

Die erste liefert Sachen:

 ']{"curuser":{"userid":"artemisfowl2","usernum":"5717357","username":"Artemis Fowl 2","email":"","registertime":"1444568721","group":"1","banstate":"0","ip":"78.226.235.170","loggedin":true,"outdatedpassword":false},"actionsuccess":true,"assertion":"3f457310c72114c316010110c6dc8f319593d2952b0ebf9a5621b0cdead6db9fce3b7324f158668f82b137135e756b01886df1e297854e536a32166706e93b577ff3a51ee20e19de94fcd7cec4a8668da750d144bbb2cb3fa58fe06fd3d72409f38ed92a28e3631bf0cce73733d0d66b73a147a86e1d7db900c3c46b7de2b429,artemisfowl2,2,1444579736,;"}' 

Während die zweite nicht:

 u'' 

Ich kann bestätigen, dass die Params in beiden Fällen korrekt codiert sind und die URLs gleich sind. Auch die Anfrage, die ich machen möchte, ist eine POST-Anfrage.

Also, warum bekomme ich eine leere Antwort?

One Solution collect form web for “Http anfragen: von urllib2 auf anfragen python 2.7”

Ich glaube, dass Ihr Endpunkt erwartet, dass die Daten im Anforderungskörper sind, im Gegensatz zu den Abfrageparametern, versuchen Sie es mit

 import requests r=requests.post("http://play.pokemonshowdown.com/action.php",data=params,headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)' }) r.text 

Ich denke, das sollte dein Problem lösen.

Zur Beantwortung Ihrer Frage:

 urllib2.Request("http://play.pokemonshowdown.com/action.php",data,{ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)' }) 

Fügt die Daten dem Körper Ihrer Anfrage hinzu, indem sie das Datenargument bereitstellt, indem Sie implizit eine Postmeldung mit den Daten im Körper der Anfrage erstellen.

Die Linie:

 r=requests.post("http://play.pokemonshowdown.com/action.php",params=params,headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)' }) 

www.hostname.com?param1=this&param2=that&param3=theother die Daten der URL hinzu (wie www.hostname.com?param1=this&param2=that&param3=theother : www.hostname.com?param1=this&param2=that&param3=theother ) anstatt auf den Körper der Anfrage. Durch das Ändern von params auf data die Daten dem Körper hinzugefügt werden, wenn der Server erwartet wird.

  • Python: Wie man eine Funktion macht, die nach der genauen Menge an Worten fragt?
  • Mit python socketserver kann ich eine Variable an den Konstruktor der Handler-Klasse übergeben
  • Sicheres Umsetzen von Umgebungsvariablen in GAE mit app.yaml
  • Wie man einen Schwimmer in Hexe umwandelt
  • Wie installiere ich für Python 2.7?
  • Löschen eines Wörterbuch-Elements, wenn der Schlüssel existiert
  • 'Is' -Operator verhält sich unerwartet mit Schwimmern
  • Wie man eine Ganzzahl zu einer Zeichenkette in python - Oanda API hinzufügt
  • Grund- und Dichte-Plots
  • Wie man die Ausgabe des Teilprozesses in Python 2.7 versteckt
  • Finde die Liste einer Liste in einer Liste mit Listen
  • Python ist die beste Programmiersprache der Welt.