如何将html请求发送到服务URL

时间:2013-01-08 07:12:03

标签: iphone xcode4.5

如何将iPhone的html请求发送到service url。我可以将整个html数据用于字符串并将string variable作为xml tag and POST request之一传递吗?我是否需要任何转换。

我的html请求就像这样

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        </head>
        
        <body style="background:#bdd9ef; padding:20px 0px; margin:0px;">
            <table width="700px" cellspacing="0" cellpadding="0" style="border-radius:10px; margin:0px auto; background:white; color:#2222; padding:20px 0px;" >
        
................
................

我是按照以下方式进行的:

 NSString *url=[NSString stringWithFormat:@"http://XXX/services/Email.svc"];
        NSMutableURLRequest *request=[[[NSMutableURLRequest alloc] init]autorelease];
        [request setURL:[NSURL URLWithString:url]];
        [request setHTTPMethod:@"POST"];
        NSString *contentType=[NSString stringWithFormat:@"text/xml"];
        [request addValue:contentType5 forHTTPHeaderField:@"Content-Type"];
        NSMutableData *postBody=[NSMutableData data];
        [postBody appendData:[[NSString stringWithFormat:@"<EmailServiceRequest xmlns=\"http://schemas.datacontract.org/2004/07/\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"]dataUsingEncoding:NSUTF8StringEncoding]];
         [postBody appendData:[[NSString stringWithFormat:@"<HtmlBody>%@</HtmlBody>",htmldata]dataUsingEncoding:NSUTF8StringEncoding]];
          [postBody appendData:[[NSString stringWithFormat:@"</EmailServiceRequest>"]dataUsingEncoding:NSUTF8StringEncoding]];
        [request setHTTPBody:postBody];
        NSHTTPURLResponse *urlResponse=nil;
        NSError *error=nil;
        NSData *responseData = [NSURLConnection sendSynchronousRequest:request
                                                      returningResponse:&urlResponse
                                                                  error:&error];

        if (responseData!= NULL)
        {
            NSString *rss = [[NSString alloc] initWithData:responseData
                                                   encoding:NSUTF8StringEncoding ];
            NSLog(@"Response Code:%d",[urlResponse statusCode]);
            if([urlResponse statusCode ]>=200 && [urlResponse statusCode]<300)
            {
                NSLog(@"Response:%@",rss);
            }
        }
        else
        {
            NSLog(@"Failed to send request: %@", [error localizedDescription]);
        }

但是我收到错误而无法发布

任何建议/帮助都会非常明显

1 个答案:

答案 0 :(得分:1)

您可以使用NSURLConnection:     设置NSURLRequest:使用requestWithURL:(NSURL *)theURL初始化请求。     如果您需要指定POST个请求和/或HTTP标头,请使用NSMutableURLRequest

    (void)setHTTPMethod:(NSString *)method
    (void)setHTTPBody:(NSData *)data
    (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field

使用NSURLConnection

以两种方式发送您的请求
    Synchronously: (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)

这会返回一个NSData变量 重要提示:请记住在单独的线程中启动同步请求以避免阻止UI。

    Asynchronously: (void)start

不要忘记设置NSURLConnection's委托来处理连接,如下所示:

    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [self.data setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d {
    [self.data appendData:d];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    [[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"")
                                 message:[error localizedDescription]
                                delegate:nil
                       cancelButtonTitle:NSLocalizedString(@"OK", @"") 
                       otherButtonTitles:nil] autorelease] show];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];

    // Do anything you want with it 

    [responseText release];
}

// Handle basic authentication challenge if needed
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
    NSString *username = @"username";
    NSString *password = @"password";

    NSURLCredential *credential = [NSURLCredential credentialWithUser:username
                                                             password:password
                                                          persistence:NSURLCredentialPersistenceForSession];
    [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}