6
votes

Here's a portion of the html code I'm trying to submit the textarea, much this textarea this forum uses to type in questions. It's not working, nothing gets sent and the type of response i get back is

NSHTTPURLResponse: 0x617bb20

Though I managed to get it working for the login except i replaced body=%@ with user=%@&pass=%@

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://forums.whirlpool.net.au%@", replyLink]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setRequestMethod:@"POST"];
[request addRequestHeader:@"Content-Type" value:@"application/xml;charset=UTF-8;"];
[request setPostValue:@"test" forKey:@"body"];
[request setDelegate:self];
[request startAsynchronous];

- (void) requestFinished:(ASIHTTPRequest *)request {
//NSString *responseString = [request responseString];
NSLog(@"Response %d : %@", request.responseStatusCode, [request responseString]);

//NSData *responseData = [request responseData];
}

- (void) requestStarted:(ASIHTTPRequest *) request {
NSLog(@"request started...");
}

- (void) requestFailed:(ASIHTTPRequest *) request {
NSError *error = [request error];
NSLog(@"%@", error);
}

Updated code using ASIHTTPRequest.

3
Do not call retainCount. It is useless.bbum

3 Answers

16
votes

ASIHTTPRequest is the way to go here. It's difficult to understand what is exactly wrong with the code you've written (except that it looks like a synchronous request, which is a no-no).

In ASIHTTPRequest you can do this:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:someUrl];
[request setRequestMethod:@"POST"];
[request setPostValue:@"..." forKey:@"user"];
[request setPostValue:@"..." forKey:@"password"];

[request setDelegate:self];
[request startAsyncrhonous];

Then, make sure your class conforms to the ASIHTTPRequestDelegate protocol and implement at the very least, this method:

- (void)requestFinished:(ASIHTTPRequest *)request {
   NSLog(@"Response %d ==> %@", request.responseStatusCode, [request responseString]);
}

You can also handle other methods if you choose, such as:

- (void)requestStarted:(ASIHTTPRequest *)request;
- (void)requestFailed:(ASIHTTPRequest *)request;

You can always download the ASIHTTPRequest project from github at http://github.com/pokeb/asi-http-request.

The docs are located at http://allseeing-i.com/ASIHTTPRequest/ and are fantastic.

Hope this helps!

2
votes
#import "ASIHTTPRequest.h"
#import "ASIFormDataRequest.h"
#import "JSON.h"
#import "JSONKit.h"
NSURL *url = [NSURL URLWithString:[[NSString stringWithFormat:@"YOUR URL"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setRequestMethod:@"POST"];

    [request setPostValue:Email forKey:@"email"];
    [request setPostValue:Password forKey:@"password"];
    [request setDelegate:self];
    [request setUsername:@"signin"];
    [request startAsynchronous];
#pragma mark- Request Finish
- (void)requestFailed:(ASIHTTPRequest *)request;
{
    NSLog(@"**********    RequestFailed     **************%@",request.responseString);
    [SVProgressHUD dismiss];

}

-(void)requestFinished:(ASIHTTPRequest *)request
{
    SBJSON *parser = [[SBJSON alloc] init];
    NSDictionary *resDict = [parser objectWithString:[request responseString] error:nil];
    if ([[request username] isEqualToString:@"signin"])
    {

    }
    [SVProgressHUD dismiss];
}

AFNetworking Files:https://drive.google.com/file/d/0B_RDiggCq5U3enh2WUdKaVlRcGM/view?usp=sharing

ASIHTTPREQUEST files:https://drive.google.com/file/d/0B_RDiggCq5U3LUttRm9WSS1KN2s/view?usp=sharing

1
votes

Just like to say I got it working :).

For those who wants hints and are in my position, well look for hidden fields in forms or check this site http://www.echoecho.com/htmlforms07.htm

and this post to see what I mean

http://www.iphonedevsdk.com/forum/148450-post14.html

For those who just want a more direct answer keep reading but please read the iphonedevsdk link that was a fundamental step in trying to figure the answer.

As an example one of the hidden fields that were in the html code was:

<input type="hidden" name="version" id="version" value="3">

this would translate to

[request setPostValue:@"3" forKey:@"version"];

"forKey"'s are the "name" field in the html and the "setPostValue" is the value in "html"

you can take the above thinking and apply it to simulate a button press from

<input type="submit" name="post" id="post" tabindex="56" style="width:150px;font:16px Arial;" value="Post Reply" onc...

to

[request setPostValue:@"submit" forKey:@"post"];

hopefully that helps others :).