2016-07-27 22 views
0

Ich habe zwei Computer im selben Netzwerk und ich versuche, eine Datei von einem zum anderen mit Python (im Kontext eines größeren Projekts) zu übergeben.Hochladen von Datei mit Python zu Flasche Server

Auf der Server-Seite ich die folgende Flasche Skript habe:

import bottle 
import json 

@bottle.hook('after_request') 
def enable_cors(): 
    """ 
    You need to add some headers to each request. 
    Don't use the wildcard '*' for Access-Control-Allow-Origin in production. 
    """ 
    bottle.response.headers['Access-Control-Allow-Origin'] = '*' 
    bottle.response.headers['Access-Control-Allow-Methods'] = 'PUT, GET, POST, DELETE, OPTIONS' 
    bottle.response.headers['Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token' 

# LANDING (IT IS NOT REALLY NEEDED JUST TO CHECK STUFF) 
@bottle.route('/', method='GET') 
def root(): 
    return { 
     'api': 'api/' 
    } 

@bottle.route('/api', method='POST') 
def upload(): 
    upload = bottle.request.files.get('file') 
    print upload.filename 
    upload.save('input.txt') 

if __name__ == '__main__': 
    bottle.run(host='0.0.0.0', port=8080, debug=True) 

Auf der Client-Seite Ich versuche, die Datei über die Anforderungs Bibliothek zu senden, wie:

import sys 
import requests 

r = requests.post('http://ip:port/api/', files={'file': open(sys.argv[1], 'rb')}) 
print r 

(ip und Port entsprechend den jeweiligen Werten).

Ich bekomme diesen Fehler, den ich nicht sicher bin, wie man damit umgeht.

Traceback (most recent call last): 
    File "loopmatch.py", line 4, in <module> 
    r = requests.post('http://ip:port/api/', files={'file': open(sys.argv[1], 'rb')}) 
    File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 111, in post 
    return request('post', url, data=data, json=json, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 57, in request 
    return session.request(method=method, url=url, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 475, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 585, in send 
    r = adapter.send(request, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 453, in send 
    raise ConnectionError(err, request=request) 
requests.exceptions.ConnectionError: ('Connection aborted.', error(32, 'Broken pipe')) 

Jede Hilfe wird sehr geschätzt.
Danke!

+1

Ich sehe kein Problem da drüben ... sollte definitiv funktionieren ... Laufen Sie hinter Proxy? Versuchen Sie, die pyc zu reinigen und schließen Sie die PID bei Bedarf und stellen Sie sicher, dass der ip-Port, den Sie ausführen, frei ist, bevor Sie laufen ... –

+0

Alles sieht gut aus in diesen Grüßen. Die Route * root * wurde festgelegt, um diese Probleme bewerten zu können. Ich habe gesehen, was der Fehler war. Aber danke für deine Antwort! – jaumebonet

Antwort

0

So ... Die Sache ziemlich dumm ist ... einfach das hier, falls jemand Antwort verlassen stampft sonst mit diesem dummen Fehler ...

Die bottle.route und die requests.url müssen übereinstimmen genau. Im Mai Fall die Route war api während die urlapi/ war ... das ist, warum sie nicht funktionieren ...

One sowohl api/ oder api bewegen muss.

+1

Kühl. FYI der Grund, dass sie genau übereinstimmen müssen, ist, da '/ api' und'/api/'sind * verschiedene * Pfade, nach der HTTP-Spezifikation. Sie als äquivalent zu betrachten, wäre ein ernstes Problem in Bottle oder einem Web-Framework. –