簡體   English   中英

如何使用web2py和python-requests對GET請求的全部數據進行響應

[英]How to response with full range of data to GET request using web2py and python-requests

我對web2py和Web請求非常web2py ,因此請保持放松狀態。 我嘗試使用允許我執行以下操作的web2py框架制作應用程序:我將POST請求發送到遠程服務器(例如,服務器的url為https://100.100.10.100

headers = {'Content-type': 'application/json'}
payload = {"uuid": some_file.json,
        "level": "public",
        "Url": " http://localhost:8000/myApp/default/file_to_process}
requests.post('https://100.100.10.100', data=json.dumps(payload), headers=headers)

服務器接收請求,並使用計數器GET請求嘗試從位於/home/user/Desktop/some_files硬盤驅動器上並與web2py應用程序頁面http://localhost:8000/myApp/default/file_to_process鏈接的some_file.json中獲取數據用下面的代碼

Controller:
def file_to_process():
    return dict(files=Expose('/home/user/Desktop/some_files'))
View:
{{=files}}

問題是服務器只能從文件中接收第一個字符串,而不能接收整個數據范圍...我不明白我應該在哪里搜索錯誤:在web2py代碼或Python requests POST請求中。 請提出您的建議或提供解決方案。

Expose功能實際上旨在使能在瀏覽器中構建UI來列出和下載給定目錄中的文件,因此它缺乏靈活性(例如,它只是將打開的文件對象返回給服務器而不設置Content-Length標頭) ,這可能導致通過分塊傳輸編碼來提供文件,具體取決於提供web2py的方式)。

但是,您實際上根本不需要在這里Expose ,因為您可以簡單地使用response.stream來提供單獨請求的文件:

import os

def file_to_process():
    path = os.path.join('home', 'user', 'Desktop', 'some_files', *request.args)
    response.headers['Content-Type'] = 'application/json'
    return response.stream(path)

請注意,如果文件名具有.json擴展名,則無需設置Content-Type標頭,因為response.stream將自動處理該標頭。

另外,如果遠程服務器允許它,而不是讓遠程服務器從web2py請求文件,您可能會考慮僅通過初始請求將文件直接發布到遠程服務器(例如,請參閱https://toolbelt.readthedocs。 org / en / latest / uploading-data.html )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM