Forumdelen sponsras av

Python - POSTa Fil - Connection aborted

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jan 2010

Python - POSTa Fil - Connection aborted

Behöver lite Python-hjälp denna afton. Borde inte vara något problem egentligen, men likt förbannat funkar det inte.

Har ett Python-script. Inget speciellt.
Hämtar data, sätter ihop till CSV. Laddar upp till en server via en HTTP-POST.

Körde ursprungligen med Requests-biblioteket, men gav Broken Pipe och efter lite googling övergav jag det, körde direkt på urllib3 istället.
Detta script körs på några antal datakällor. Efter ändring till urllib3 blev det i alla fall bättre.

2/4 datakällor började fungera, varav största på 3MB.
Exporter av återstående 2 fortsätter dock att krångla. De är större, storleksmässigt hamnar de kanske på max... 10MB.

Mellan databas och filserver läggs dom i serverns tmp-mapp(Ubuntu).
Relevanta koden:

http = urllib3.PoolManager() with open(file, 'rb') as fp: file_data = fp.read() r = http.request( 'POST', url, fields={ 'filefield': (filename, file_data, 'text/csv') }) #Kommer inte hit rjson = json.loads(r.data.decode('utf-8'))

Resulterar i:
"A python runtime error occurred <class 'urllib3.exceptions.ProtocolError'>: Connection aborted."
Gjort ett antal kodkombinationer, ändrat parametrar, omskrivningar, osv osv. Men det här är det som fungerar på övriga källor.
Har uteslutit filservern, testat via JS att ladda upp fil omkring 25MB, samt inget loggat.

Någon smart sweclockers som kommer på någon fix? För jag vill bara gå o sova

Bärbar: Macbook Pro 13" Retina Mid-2014

Trädvy Permalänk
Forumledare
Registrerad
Okt 2002

Du kan addera debug-output från urllib3 om du konfigurerar loggingDEBUG-nivå:

>>> import logging >>> import urllib3 >>> logging.basicConfig(level=logging.DEBUG) >>> http = urllib3.PoolManager() >>> r = http.request('GET', 'http://example.com/') DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): example.com DEBUG:urllib3.connectionpool:http://example.com:80 "GET / HTTP/1.1" 200 1270

Det kanske kan ge någon extra information. Om du är stensäker på att dina anrop är korrekt formade så låter det typiskt som att problemet ligger på serversidan, eller möjligen i någon proxy mellan dig och servern. urllib3 har inga problem med stora datamängder i sig.

Som du verkar vara medveten om så använder Requests ju just urllib3 under huven, med största skillnad att Requests är lite mer anpassat för enkel slutanvändning, där urllib3 snarare är tänkt att vara just en byggsten för högnivåbibliotek.

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jan 2010

Abort mission...

Suttit flera timmar.
Bad polaren kasta ett öga.

"Ska det inte vara HTTPS?"

Jag har slitit mitt hår. För att jag missat ett S

Bärbar: Macbook Pro 13" Retina Mid-2014