如何使用 web2py 和 python-requests 响应 GET 请求的全范围数据
How to response with full range of data to GET request using web2py and python-requests
我对 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 请求尝试从 some_file.json
获取数据,这些数据位于 /home/user/Desktop/some_files
我的硬盘驱动器上并链接到 web2py
应用程序的页面 http://localhost:8000/myApp/default/file_to_process
使用以下代码
Controller:
def file_to_process():
return dict(files=Expose('/home/user/Desktop/some_files'))
View:
{{=files}}
问题是服务器只能从文件中接收第一个字符串,而不是整个数据范围...我不明白应该在哪里搜索错误:在 web2py
代码中或在 Python requests
POST 请求。
请提出您的建议或提供解决方案。
Expose
功能的真正目的是在浏览器中构建一个 UI 来列出和下载给定目录中的文件,因此它缺乏一些灵活性(例如,它只是 returns 一个打开的文件 object 到服务器而不设置 Content-Length header,这可能导致文件通过分块传输编码提供,具体取决于 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 header,因为response.stream
会自动处理。
此外,如果远程服务器允许,而不是让远程服务器从 web2py 请求文件,您可以考虑直接将文件与初始请求一起发布到远程服务器(例如,参见 https://toolbelt.readthedocs.org/en/latest/uploading-data.html).
我对 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 请求尝试从 some_file.json
获取数据,这些数据位于 /home/user/Desktop/some_files
我的硬盘驱动器上并链接到 web2py
应用程序的页面 http://localhost:8000/myApp/default/file_to_process
使用以下代码
Controller:
def file_to_process():
return dict(files=Expose('/home/user/Desktop/some_files'))
View:
{{=files}}
问题是服务器只能从文件中接收第一个字符串,而不是整个数据范围...我不明白应该在哪里搜索错误:在 web2py
代码中或在 Python requests
POST 请求。
请提出您的建议或提供解决方案。
Expose
功能的真正目的是在浏览器中构建一个 UI 来列出和下载给定目录中的文件,因此它缺乏一些灵活性(例如,它只是 returns 一个打开的文件 object 到服务器而不设置 Content-Length header,这可能导致文件通过分块传输编码提供,具体取决于 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 header,因为response.stream
会自动处理。
此外,如果远程服务器允许,而不是让远程服务器从 web2py 请求文件,您可以考虑直接将文件与初始请求一起发布到远程服务器(例如,参见 https://toolbelt.readthedocs.org/en/latest/uploading-data.html).