2015-11-03 67 views
0

我想通過python請求模塊發送一個python文件和一些json數據到服務器。以下是我的代碼的片段。如何使用請求發送文件和數據?

files = {'file': (FILE, open('test_hello.py', 'rb'), 'text/plain')} 
job_data = dict(name='nice', interval=50, script_path="crap") 
r = post(url=url, data=job_data, files=files) 

r.status_code 
400 

r.text 
u'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n<title>400 Bad Request</title>\n<h1>Bad Request</h1>\n<p>The browser (or proxy) sent a request that this server could not understand.</p>\n' 

我得到狀態碼400.有人可以指出我在這裏錯過了什麼?或分享正確的代碼片段?

PS:我已經看到了類似的問題在stackoverflow,但他們都給出了相同的錯誤代碼。我試過了。

注:我在服務器端使用瓶0.10

UPDATE:客戶端代碼是工作的罰款。 這是我的服務器端Flask代碼,這是糟糕的。它甚至給了一個錯誤信息,說「錯誤的請求」

r.text 
400 Bad Request</title>\n<h1>Bad Request</h1>\n<p>The browser (or proxy) sent a request that this server could not understand.' 

此錯誤消息讓我覺得作爲預期,即使它看起來不錯,類似於我已經嘗試過其他計算器問題,客戶端代碼是行不通的。

感謝所有人回答這個問題。

回答

1

400意味着請求格式不正確。您發送給服務器的數據流不遵循規則,它需要某種類型的數據(比如JSON),但是您發送的對象類型是a。他們都是不同的,並檢查python的JSON module,並在將來處理JSON對象時使用它們。

0

使用數據作爲參數將它作爲表單編碼數據發送,而不是作爲json,除非進行適當的編碼。 json.dumps(data)通常用來編碼內置在Python數據作爲JSON但Requests最新版本有JSON處理。

r = post(url=url, json=job_data, files=files) 

將發送job_data到服務器的JSON編碼字符串。

1

當我POST到httpbin時,你的代碼就像書面文件一樣工作。無論您發送數據的服務是否期待其他服務,都不知道它期望的是什麼,我們無法進一步提供幫助。

>>> import requests 
>>> url = 'http://httpbin.org/post' 
>>> files = {'file': ('test_hello.py', open('test_hello.py', 'rb'), 'text/plain')} 
>>> job_data = dict(name='nice', interval=50, script_path="crap") 
>>> r = requests.post(url=url, data=job_data, files=files) 
>>> r.status_code 
200 
>>> r.json() 
{u'files': {u'file': u"print 'hi'\n"}, u'origin': u'208.91.164.254', u'form': {u'script_path': u'crap', u'interval': u'50', u'name': u'nice'}, u'url': u'http://httpbin.org/post', u'args': {}, u'headers': {u'Content-Length': u'462', u'Accept-Encoding': u'gzip, deflate', u'Accept': u'*/*', u'User-Agent': u'python-requests/2.8.1', u'Host': u'httpbin.org', u'Content-Type': u'multipart/form-data; boundary=8064073dc3f1449cb3e46a7a6c5669a3'}, u'json': None, u'data': u''} 
+0

感謝您分享此故障排除技巧。我意識到我的客戶端代碼正在工作。這是我的服務器端ERROR味精誤導我。 –

相關問題