我正在尝试了解如何使用http POST和我当前的客户端 - 服务器协议设计发送图像.从客户端到服务器的所有消息类似于下面的示例,有一个带参数的cmd字符串cmd和一些更相关的命令参数.
例如,这是我向服务器发送文本消息的方式:
- (void)sendMessagesWithText:(NSString *)text fromUser:(NSString *)userId
{
NSString *url = SERVER_URL;
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"cmd=%@&userid=%@&msgtext=%@",
@"sendmessage",
userId,
text] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
// send to server
[[NetworkHelper sharedManager] sendRequest:request];
}
Run Code Online (Sandbox Code Playgroud)
现在我想让用户也发送图像,但是如何使用我的协议设计发送它?我应该在cmd字符串后将图像附加到正文吗?
我正在编写一个从Web服务请求数据的iPhone应用程序,为了获取该数据,我正在使用NSMutableURLRequest.
我遇到的问题是请求的数据量非常大(~11Mb),这导致我的应用程序被操作系统杀死.
是否有任何方式以允许我处理数据块的方式流式传输数据,或者我是否应该将请求拆分为多个单独的请求以防止内存负载增加?
我使用dataTaskWithRequest并获取数组的json,其中包含两个对象(这些对象是键,值),我想在两个对象中检查一个键值.
这是我的代码:
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
print("Response: \(response)")
var jsonArray: [String:AnyObject]!
do {
jsonArray = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) as? [String:AnyObject]
} catch {
print(error)
}
for json in jsonArray {
print("object json reciver :",json)
//type (string , anyobject) has no subscript member
print("state :",json["state"])
}
})
Run Code Online (Sandbox Code Playgroud) NSMutableURLRequest显然改变了标题字段的大小写.
例如,设置:
[request addValue:myValue forHTTPHeaderField:@"FOOBAR"];
Run Code Online (Sandbox Code Playgroud)
将标题字段更改为"Foobar".
有人知道解决这个问题吗?我正在使用一个需要传递区分大小写字段的服务.
另外,NSMutableURLRequest不应该真的为我做出决定.
我试图像这样创建一个NSMutableURLRequest:
NSURL *URLWithString = [
NSString stringWithFormat:@"%@?%@",
urlString,
datas
];
NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:URLWithString] autorelease];
Run Code Online (Sandbox Code Playgroud)
当我在iPhone 4S上运行它时,应用程序崩溃,我得到以下异常:
2012-10-30 15:58:53.495 [429:907] - [__ NSCFString absoluteURL]:无法识别的选择器发送到实例0x1cd74a90
2012-10-30 15:58:53.497 [429:907] ---由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSCFString absoluteURL]:无法识别的选择器发送到实例0x1cd74a90'
---第一次抛出调用堆栈:
(0x361b62a3 0x344c697f 0x361b9e07 0x361b8531 0x3610ff68 0x3611363f 0x320396e7 0x32039551 0x320394ed 0x33bde661 0x33bde597 0x387e1 0x376d9f1f 0x376da9a9 0x341c535d 0x3618b173 0x3618b117 0x36189f99 0x360fcebd 0x360fcd49 0x366392eb 0x374db301 0x37cc1 0x37c58)
libc ++ abi.dylib:terminate调用抛出异常
怎么了?