当我按下按钮时,我需要从我的iphone拨打网址。
url从UITextField获取一个值作为参数,它也使用POST方法来调用webservice。我如何使用我的iPhone中的URL。我用GET方法做了同样的事情。但为此我创建了一个带有textfield值的url字符串。它不能用于POST。所以我为此做了什么。是否有任何示例代码..此外,Web服务是“.asmx”类型。这就是我所做的......
-(IBAction)loginButtonPressed:(id)sender{
NSString *post =[NSString stringWithFormat:@"name=myUserName&pass=myPassword"];
NSLog(post);
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://192.168.50.194:9989/webservice1.asmx?op=LoginAuthentication"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(data);
}
我得到的错误是
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver</soap:Value></soap:Code><soap:Reason><soap:Text xml:lang="en">Server was unable to process request. ---> Data at the root level is invalid. Line 1, position 1.</soap:Text></soap:Reason><soap:Detail /></soap:Fault></soap:Body></soap:Envelope>
请帮帮我。!!!
谢谢, 世斌
答案 0 :(得分:3)
您可以使用以下内容将HTTP方法设置为使用POST而不是默认GET:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:myURL];
[request setHTTPMethod:@"POST"];
答案 1 :(得分:3)
我得到了它的工作感谢您的支持..这是工作代码...
-(IBAction)loginButtonPressed:(id)sender{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(loginID.text);
NSLog(loginPassword.text);
NSString *soapMsg = [[NSString alloc] initWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><IphoneAuthenticateduser xmlns=\"http://tempuri.org/\"><UserName>%@</UserName><Passwordtext>%@</Passwordtext></IphoneAuthenticateduser></soap:Body></soap:Envelope>",loginID.text,loginPassword.text];
NSLog(soapMsg);
NSURL *url = [NSURL URLWithString:@"http://192.168.50.194:9989/Iphoneauthentication.asmx"];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]];
[req addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[req addValue:@"http://tempuri.org/IphoneAuthenticateduser" forHTTPHeaderField:@"SOAPAction"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[req setHTTPMethod:@"POST"];
[req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error];
if(!response){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection Error"
message:@"Failed to Connect to the Internet"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
else{
xmlResult=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:urlData];
XMLParser *parser = [[XMLParser alloc] initXMLParser];
[xmlParser setDelegate:parser];
sucess = [xmlParser parse];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if(sucess){
NSLog(appDelegate.message);
if(appDelegate.message != NULL){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed"
message:appDelegate.message
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
appDelegate.message = NULL;
}
else{
UserViewController *userController = [[UserViewController alloc] initWithNibName:@"UserViewController"
bundle:nil];
[self presentModalViewController:userController animated:YES];
[userController release];
}
}
else{
NSLog(@"Parsing Failed");
}
}
[pool release];
}