2013-02-13 4 views
3

У меня есть простой веб-сервис asp.net, который возвращает данные формата json. Я хочу отправить HTTP-запрос с параметром для получения json-данных. Как я могу отправить запрос и получить данные?Http Post Request с параметрами

запрос сообщение:

POST /JsonWS.asmx/FirmaGetir HTTP/1.1 
Host: localhost 
Content-Type: application/x-www-form-urlencoded 
Content-Length: length 

firID=string 

Ответ:

HTTP/1.1 200 OK 
Content-Type: text/xml; charset=utf-8 
Content-Length: length  
<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://tempuri.org/">string</string> 

Я пытаюсь некоторые коды, но они не работали.

NSString *firmadi [email protected]""; 
NSMutableData *response; 


-(IBAction)buttonClick:(id)sender 
{ 
    NSString *firid = [NSString stringWithFormat:@"800"]; 

    response = [[NSMutableData data] retain]; 

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://192.168.1.23/testService/JsonWS.asmx?op=FirmaGetir"]]; 

    NSString *params = [[NSString alloc] initWithFormat:@"firID=%@",firid]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    if(theConnection) 
    { 
     response = [[NSMutableData data] retain]; 

    } 
    else 
    { 
     NSLog(@"theConnection is null"); 
    } 

} 

-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)responsed 
{ 
    [response setLength:0]; 
    NSURLResponse * httpResponse; 

    httpResponse = (NSURLResponse *) responsed; 

} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data 
{ 
    [response appendData:data]; 
    //NSLog(@"webdata: %@", data); 

} 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error 
{ 
    NSLog(@"error with the connection"); 
    [connection release]; 
    [response release]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 

    response = [[NSMutableData data] retain]; 

NSString *responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",responseString); 

} 
+1

Вы пытались установить тип MIME на запрос «application/json» вместо «application/x-www-form-urlencoded»? –

+0

Это происходит из моего веб-сервиса, почему я меняю этот параметр? –

+0

Что не сработало с кодом, который вы опубликовали? –

ответ

1

Что ты делаешь здесь:

[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

Эта строка возвращает NSURLConnection, но вы не хранить его. Это ничего не делает для вас.

Вы очищаете свои данные, прежде чем читать:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    response = [[NSMutableData data] retain]; // This line is clearing your data get rid of it 
    NSString *responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",responseString); 

} 

Редактировать

-(IBAction)buttonClick:(id)sender { 

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://192.168.1.23/testService/JsonWS.asmx?op=FirmaGetir"] 
                  cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
                 timeoutInterval:15]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:[@"firID=800" dataUsingEncoding:NSUTF8StringEncoding]]; 
    self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    [self.connection start]; 

} 


#pragma NSURLConnection Delegates 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 

    if (!self.receivedData){ 
     self.receivedData = [NSMutableData data]; 
    } 
    [self.receivedData appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 

    NSString *responseString = [[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",responseString); 
} 
+0

Спасибо за внимание. Im новое для развития ios. Поэтому в моем коде есть какой-то глупый блок кода. Я задаю вопросы по этой причине. Я попробую, но напишите полный код этого процесса. –

+0

Я добавил пример кода. – Jaybit

+0

Спасибо, я постараюсь завтра. –

0

Я страдал эту проблему сегодня утром, и я просто понять это сейчас. Я думаю, ключ к вашему вопросу: Как использовать метод POST с параметром. На самом деле, это довольно просто.

(1) Сначала вы должны убедиться, что ваш файл готов к отправке. Здесь мы говорим, что это NSString, называемый stringReady. Мы используем его как параметр в нашем методе postRequest (здесь не параметр HTTP POST, о котором мы хотим поговорить. Не беспокойтесь).

// Send JSON to server 
- (void) postRequest:(NSString *)stringReady{ 
// Create a new NSMutableURLRequest 
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.xxxxxx.io/addcpd.php"]]; 
[req setHTTPMethod:@"POST"]; 

(2) Теперь мы говорим, что параметр, который сервер хочет получить называется «данные», это способ, как вставить параметр в теле HTTP.

// Add the [data] parameter 
NSString *bodyWithPara = [NSString stringWithFormat:@"data=%@",stringReady]; 

Престола, это как добавить параметр при использовании метода POST. Вы просто просто поместите параметр перед файлом, который хотите отправить. Если вы aleary konw, что ваш параметр, то вы можете лучше проверить этот сайт:

https://www.hurl.it/

Это поможет вам проверить, если вы отправляете файлы правильно, и он покажет ответ на нижней части сайта.

(3) В-третьих, мы упаковываем наш NSString в NSData и отправляем его на сервер.

// Convert the String to NSData 
NSData *postData = [bodyWithPara dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
// Set the content length and http body 
NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]]; 
[req addValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[req setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[req setHTTPBody:postData]; 
// Create an NSURLSession 
NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *task = [session dataTaskWithRequest:req 
             completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
              // Do something with response data here - convert to JSON, check if error exists, etc.... 
              if (!data) { 
               NSLog(@"No data returned from the sever, error occured: %@", error); 
               return; 
              } 

              NSLog(@"got the NSData fine. here it is...\n%@\n", data); 
              NSLog(@"next step, deserialising"); 

              NSError *deserr; 
              NSDictionary *responseDict = [NSJSONSerialization 
                      JSONObjectWithData:data 
                      options:kNilOptions 
                      error:&deserr]; 
              NSLog(@"so, here's the responseDict\n\n\n%@\n\n\n", responseDict); 
             }]; 

[task resume];} 

Надеюсь, это поможет кому-то, кто застрял здесь.