【发布时间】:2014-07-02 17:55:05
【问题描述】:
我想将图像发布到服务器端 Flask 端点。我使用以下代码运行以下 GET 和 POST,然后描述服务器接收到的内容。如何确保服务器在 POST 请求中接收到图像和发布参数?
[_client POST:@"post_image"
parameters:parameters
constructingBodyWithBlock:nil
success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog([responseObject description]);
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog([error description]);
}
];
[_client GET:@"test_get"
parameters:parameters
success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog([responseObject description]);
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog([error description]);
}
];
日志打印:
2014-07-02 10:29:06.883 lens-app[2808:60b] {
code = "";
data = "good stuff";
error = "";
success = 1;
}
2014-07-02 10:29:06.889 lens-app[2808:60b] {
code = "";
data = "good stuff";
error = "";
success = 1;
}
我使用这个 Flask 代码来描述服务器接收到的请求:
def print_request():
print 'request'
print str(request)
print 'request.headers'
print str(request.headers)
print 'request.args'
print str(request.args)
print 'request.form'
print str(request.form)
print 'request.files'
print str(request.files)
print 'request.data'
print str(request.data)
print 'request.stream'
print str(request.stream.read())
print 'request.environ'
print str(request.environ)
print 'request.get_json()'
print str(request.get_json())
print 'row post body'
print str(request.environ['body_copy'])
@app.route('/post_image', methods=['POST'])
def post_image():
print_request()
return json_response('good stuff')
@app.route('/test_get', methods=['GET'])
def test_get():
print_request()
return json_response('good stuff')
这是发布请求的结果:
request
<Request 'http://ec2-xyz.us-west-2.compute.amazonaws.com/post_image' [POST]>
request.headers
Transfer-Encoding: Chunked
Content-Length:
User-Agent: lens-app/1.0 (iPhone; iOS 7.1.1; Scale/2.00)
Connection: keep-alive
Host: ec2-xyz.us-west-2.compute.amazonaws.com
Accept: */*
Accept-Language: en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5
Content-Type: multipart/form-data; boundary=Boundary+F841C4764BD7CE95
Accept-Encoding: gzip, deflate
request.args
ImmutableMultiDict([])
request.form
ImmutableMultiDict([])
request.files
ImmutableMultiDict([])
request.data
request.stream
request.environ
{'wsgi.multiprocess': False, 'SERVER_SOFTWARE': 'Werkzeug/0.9.6', 'SCRIPT_NAME': '', 'HTTP_TRANSFER_ENCODING': 'Chunked', 'REQUEST_METHOD': 'POST', 'PATH_INFO': '/post_image', 'SERVER_PROTOCOL': 'HTTP/1.1', 'QUERY_STRING': '', 'werkzeug.server.shutdown': <function shutdown_server at 0x2c45c80>, 'CONTENT_LENGTH': '', 'HTTP_USER_AGENT': 'lens-app/1.0 (iPhone; iOS 7.1.1; Scale/2.00)', 'HTTP_CONNECTION': 'keep-alive', 'SERVER_NAME': '0.0.0.0', 'REMOTE_PORT': 44640, 'wsgi.url_scheme': 'http', 'SERVER_PORT': '80', 'werkzeug.request': <Request 'http://ec2-54-214-166-2.us-west-2.compute.amazonaws.com/post_image' [POST]>, 'body_copy': '', 'wsgi.input': <cStringIO.StringI object at 0x2be5ad0>, 'HTTP_HOST': 'ec2-xyz.us-west-2.compute.amazonaws.com', 'wsgi.multithread': False, 'HTTP_ACCEPT': '*/*', 'wsgi.version': (1, 0), 'wsgi.run_once': False, 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x7fccfbd3f1e0>, 'REMOTE_ADDR': '204.28.119.158', 'HTTP_ACCEPT_LANGUAGE': 'en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5', 'CONTENT_TYPE': 'multipart/form-data; boundary=Boundary+F841C4764BD7CE95', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate'}
request.get_json()
None
row post body
这是获取请求的结果:
request
<Request 'http://ec2-xyz.us-west-2.compute.amazonaws.com/test_get?up=what's&you=Hey' [GET]>
request.headers
Content-Length:
User-Agent: lens-app/1.0 (iPhone; iOS 7.1.1; Scale/2.00)
Connection: keep-alive
Host: ec2-xyz.us-west-2.compute.amazonaws.com
Accept: */*
Accept-Language: en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5
Content-Type:
Accept-Encoding: gzip, deflate
request.args
ImmutableMultiDict([('you', u'Hey'), ('up', u"what's")])
request.form
ImmutableMultiDict([])
request.files
ImmutableMultiDict([])
request.data
request.stream
request.environ
{'wsgi.multiprocess': False, 'SERVER_SOFTWARE': 'Werkzeug/0.9.6', 'SCRIPT_NAME': '', 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/test_get', 'SERVER_PROTOCOL': 'HTTP/1.1', 'QUERY_STRING': 'up=what%27s&you=Hey', 'werkzeug.server.shutdown': <function shutdown_server at 0x2c45c08>, 'CONTENT_LENGTH': '', 'HTTP_USER_AGENT': 'lens-app/1.0 (iPhone; iOS 7.1.1; Scale/2.00)', 'HTTP_CONNECTION': 'keep-alive', 'SERVER_NAME': '0.0.0.0', 'REMOTE_PORT': 33553, 'wsgi.url_scheme': 'http', 'SERVER_PORT': '80', 'werkzeug.request': <Request 'http://ec2-xyz.us-west-2.compute.amazonaws.com/test_get?up=what's&you=Hey' [GET]>, 'body_copy': '', 'wsgi.input': <cStringIO.StringI object at 0x2be5ad0>, 'HTTP_HOST': 'ec2-xyz.us-west-2.compute.amazonaws.com', 'wsgi.multithread': False, 'HTTP_ACCEPT': '*/*', 'wsgi.version': (1, 0), 'wsgi.run_once': False, 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x7fccfbd3f1e0>, 'REMOTE_ADDR': '204.28.119.158', 'HTTP_ACCEPT_LANGUAGE': 'en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5', 'CONTENT_TYPE': '', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate'}
request.get_json()
None
row post body
【问题讨论】:
-
首先要注意:您的 Content-Lenght 标头为空。这将阻止任何 POST 正文解析。
标签: ios flask afnetworking-2