Iphone 使用NSMutableURLRequest向web服务器发布发布数据

Iphone 使用NSMutableURLRequest向web服务器发布发布数据,iphone,objective-c,post,https,webserver,Iphone,Objective C,Post,Https,Webserver,我正在使用NSMutableURLRequest将一些数据发布到受密码保护的web服务器。我已经连接了所有的东西,我可以很好地检索数据,但由于某些原因,我无法发布任何数据 我正在使用NSURLCredentials作为用户名和密码,连接没有问题 正在启动URL请求: -(void)starting { NSURL *url = [NSURL URLWithString:@"http:myurl/myfile.txt"]; NSMutableURLRequest *urlRequest = [NS

我正在使用
NSMutableURLRequest
将一些数据发布到受密码保护的web服务器。我已经连接了所有的东西,我可以很好地检索数据,但由于某些原因,我无法发布任何数据

我正在使用
NSURLCredentials
作为用户名和密码,连接没有问题

正在启动URL请求:

-(void)starting {
NSURL *url = [NSURL
URLWithString:@"http:myurl/myfile.txt"];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self]; //Calling NSURLConnection delegate methods
}
转换
NSString
我想发布到
NSData

NSString *someString = @"Hello World";
NSData* theData=[someString dataUsingEncoding:NSUTF8StringEncoding];

NSURL *someUrl = [NSURL URLWithString:@"http://myurl/myfile.txt"]; 
正在写入web服务器:

NSString *postLength = [NSString stringWithFormat:@"%d", [theData length]];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:someUrl];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];    
[request setHTTPBody:theData];
允许任何https证书:

[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[someUrl host]];
正在发送检索请求:

NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
检索到的数据的长度是否为0

if ([data length] == 0) {

    UIAlertView *dataLengthNoneAlert = [[UIAlertView alloc] initWithTitle:@"No data" message:@"There is no data on the server" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil];

    [dataLengthNoneAlert show];

}
如果没有,请告诉我新数据。。(应该是“你好世界”)


因此,我“尝试”将数据发布到web服务器,然后立即检索它。我发现我刚才写的数据长度应该是0。我甚至检查了应用程序外部的服务器,没有任何变化。url是有效的。这是我第一次使用NSMutableURLRequest,我是不是遗漏了什么?

不是一个完全的专家,但有几件事我可以尝试一下

最好将响应存储为类型
NSMutableData
而不是
NSData
,因为这样可以实现连续的动态响应

另外,苹果的
NSUrlconnection
^文档建议使用4种方法,
direceiveresponse、direceivedata、didFailwithError
didfishload
,它们有助于附加和解释数据


希望这有帮助。

验证url字符串是否以斜杠结尾:

这项工作:

http://your.url/
不起作用:

http://your.url

NSURLConnection的
sendSynchronousRequest:returningResponse:error:
方法在解释服务器数据时工作正常。问题正在向其发布。请尝试“NSData*数据=[NSData DATA WITHBYTES:[someString UTF8String]长度:[someString长度]];”和'NSMutableURLRequest*request=[NSMutableUrlRequestWithURL:someURL];该请求包括在启动身份验证(我没有包括在问题中)和
NSData*theData=[NSData dataWithBytes:[someString UTF8String]length:[someString length]]中未更改任何内容。但可能编码类型与此有关…现在我知道我做错了什么,我没有php脚本来处理POST请求。
http://your.url