Iphone 目标C-使用NSURLConnection发布数据

Iphone 目标C-使用NSURLConnection发布数据,iphone,objective-c,url,post,Iphone,Objective C,Url,Post,我正在慢慢学习iOS开发的URL加载系统,我希望有人能简要解释以下代码: NSString *myParameters = [[NSString alloc] initWithFormat:@"one=two&three=four"]; [myRequest setHTTPMethod:@"POST"]; [myRequest setHTTPBody:[myParameters dataUsingEncoding:NSUTF8StringEncoding]]; 最终,我希望能够创建一个

我正在慢慢学习iOS开发的URL加载系统,我希望有人能简要解释以下代码:

NSString *myParameters = [[NSString alloc] initWithFormat:@"one=two&three=four"];
[myRequest setHTTPMethod:@"POST"];
[myRequest setHTTPBody:[myParameters dataUsingEncoding:NSUTF8StringEncoding]];
最终,我希望能够创建一个应用程序,登录到我的ISP网站,检索我在本月剩余时间内保留的数据量,我觉得我应该首先了解setHTTPMethod/setHTTPBody


善良的问候

创建字符串的第一行可以替换为:

NSString *myParameters = @"one=two&three=four";
它是以initWithFormat编写的,因此您可以扩展它以指定参数值

第二行表示这是HTTP post请求


第三行,setHTTPBody方法采用NSData类型,因此您需要使用DataUsingEncode方法将字符串类型转换为NSData。

这是一个非常简单的HTTP请求设置;如果你有更具体的问题,你最好问这些问题

NSString *myParameters = @"paramOne=valueOne&paramTwo=valueTwo";
这将设置一个包含POST参数的字符串

[myRequest setHTTPMethod:@"POST"];
请求必须是一个


这会将参数放入帖子正文(它们需要是原始数据,因此我们首先将它们编码为UTF-8)。

感谢您的回复。作为后续行动,如果我编写了一个使用用户名和密码登录网站的应用程序,我将如何访问通常由于输入该数据而显示的页面中的数据(即主页,而不是登录页面)?它是否像使用NSURLRequest建立NSURLConnection然后下载数据那样简单?有几种方法。您可以将信息放入,作为URL的一部分提供,或使用NSURLConnection委托方法
连接:didReceiveAuthenticationChallenge:
。我强烈建议您查看。这是演示如何最充分地使用NSURLConnection的答案。“请尝试下面的代码。”句子不应在代码块中。另外,请解释您在代码中所做的工作,以便新接触该语言的人有机会理解和使用您的代码。
[myRequest setHTTPBody:[myParameters dataUsingEncoding:NSUTF8StringEncoding]];
Step 1 : set URL definitions:

// Create the request

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://192.168.0.232:8080/xxxx/api/Login"]];

    // Specify that it will be a POST request
    request.HTTPMethod = @"POST";

    // This is how we set header fields
    [request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

    NSMutableDictionary *postDict = [[NSMutableDictionary alloc] init];

    [postDict setValue:@"Login" forKey:@"methodName"];
    [postDict setValue:@"admin" forKey:@"username"];
    [postDict setValue:@"123456" forKey:@"password"];
    [postDict setValue:@"mobile" forKey:@"clientType"];


    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:postDict options:0 error:nil];

    // Checking the format
    NSString *urlString =  [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];


    // Convert your data and set your request's HTTPBody property
    NSString *stringData = [[NSString alloc] initWithFormat:@"jsonRequest=%@", urlString];

    //@"jsonRequest={\"methodName\":\"Login\",\"username\":\"admin\",\"password\":\"12345678n\",\"clientType\":\"web\"}";

    NSData *requestBodyData = [stringData dataUsingEncoding:NSUTF8StringEncoding];

    request.HTTPBody = requestBodyData;

    // Create url connection and fire request
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if (!theConnection) {

        // Release the receivedData object.
        NSMutableData *responseData = nil;

        // Inform the user that the connection failed.
    }

Step 2: 

// Declare the value for NSURLResponse URL

//pragma mark NSURLConnection Delegate Methods

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // A response has been received, this is where we initialize the instance var you created
    // so that we can append data to it in the didReceiveData method
    // Furthermore, this method is called each time there is a redirect so reinitializing it
    // also serves to clear it
    _responseData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // Append the new data to the instance variable you declared
    [_responseData appendData:data];

    NSError *error=nil;

    // Convert JSON Object into Dictionary
    NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:_responseData options:
                          NSJSONReadingMutableContainers error:&error];



    NSLog(@"Response %@",JSON);
}

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
                  willCacheResponse:(NSCachedURLResponse*)cachedResponse {
    // Return nil to indicate not necessary to store a cached response for this connection
    return nil;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    // The request is complete and data has been received
    // You can parse the stuff in your instance variable now

}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    // The request has failed for some reason!
    // Check the error var
}
please use below code.
+(void)callapi:(NSString *)str withBlock:(dictionary)block{

NSData *postData = [str dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];

NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@“%@/url”,WebserviceUrl]]
                                                          cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                      timeoutInterval:120.0];

[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPBody:postData];

[NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)
 {
     if (!data) {
         NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
          [dict setObject:[NSString stringWithFormat:@"%@",AMLocalizedString(SomethingWentWrong, nil)] forKey:@"error"];
         block(dict);
         return ;
     }
     NSError *error = nil;
     NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
     //////NSLog(@"%@",dict);
     if (!dict) {
         NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
         [dict setObject:AMLocalizedString(ServerResponceError, nil) forKey:@"error"];
         block(dict);
         return ;
     }
     block(dict);

 }];
}