Ich versuche, eine Website in Python abzufragen. Ich muss eine POST-Methode verwenden (entsprechend dem, was in meinem Browser passiert, wenn ich es mit den Entwicklertools beobachte).POST-Methode in Python: errno 104
Wenn ich die Website mit cURL abfragen, es funktioniert gut:
curl -i --data "param1=var1¶m2=var2" http://www.test.com
ich diesen Header erhalten:
HTTP/1.1 200 OK
Date: Tue, 26 Sep 2017 08:46:18 GMT
Server: Apache/1.3.33 (Unix) mod_gzip/1.3.26.1a mod_fastcgi/2.4.2 PHP/4.3.11
Transfer-Encoding: chunked
Content-Type: text/html
Aber wenn ich es in Python zu tun 3, erhalte ich einen Fehler 104.
Hier ist, was ich bisher versucht habe. Zuerst mit urllib
(inspiriert von this thread bekommen zu verwalten statt GET eine POST-Methode zu verwenden):
import re
from urllib import request as ur
# URL to handle request
url = "http://www.test.com"
data = "param1=var1¶m2=var2"
# Build a request dictionary
preq = [re.findall("[^=]+", i) for i in re.findall("[^\&]+", data)]
dreq = {i[0]: i[1] if len(i) == 2 else "" for i in preq}
# Initiate request & add method
ureq = ur.Request(url)
ureq.get_method = lambda: "POST"
# Send request
req = ur.urlopen(ureq, data=str(dreq).encode())
ich im Grunde mit requests
das gleiche tat
import re
import requests
# URL to handle request
url = "http://www.test.com"
data = "param1=var1¶m2=var2"
# Build a request dictionary
preq = [re.findall("[^=]+", i) for i in re.findall("[^\&]+", data)]
dreq = {i[0]: i[1] if len(i) == 2 else "" for i in preq}
# Initiate request & add method
req = requests.post(url, data=dreq)
In beiden Fällen bekomme ich ein HTTP 104 Fehler:
ConnectionResetError: [Errno 104] Connection reset by peer
das verstehe ich nicht, da die gleiche Anfrage mit curl arbeitet. Ich vermute, ich habe etwas mit Python-Anfrage missverstanden, aber bisher stecke ich fest. Jeder Hinweis würde geschätzt werden!