[Obj-C] WebRequest funktioniert nicht richtig

01/28/2013 18:14 snow#1
Hallo,

zur Zeit spiele ich ein bisschen mit dem Login-System etc. via POST-Request rum.

Leider funktioniert das nicht so, wie es soll.

Vorab: Hier geht es um iOS / OS X, das ganze funktioniert via Objective-C und dem Foundation-Framework. Für die NSURLConnection (so nennt sich der WebRequest) habe ich eine eigene Klasse.

Der Login klappt inzwischen, ich erhalte als Antwort die Seite mit dem Weiterleiten und im Header einen Cookie, den speichere ich für die spätere Verwendung ab.

Jetzt will ich eine Treasure erstellen:
Der Code, der den Request startet:

Code:
- (void)startConnectionWithURL:(const NSString *)_url Body:(NSString *)_body
{
    
    NSMutableURLRequest *rq = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:(NSString *)_url] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:30];
    
    NSData *requestBodyData = [_body dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
    
    [rq setHTTPMethod:@"POST"];
    [rq setValue:@"Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0" forHTTPHeaderField:@"User-Agent"];
    [rq setValue:@"HIER IST DER COOKIE, DEN ICH DAVOR ERHALTEN HABE" forHTTPHeaderField:@"Cookie"];
    [rq setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [rq setValue:[NSString stringWithFormat:@"%d",[requestBodyData length]] forHTTPHeaderField:@"Content-Length"];
    
    [rq setHTTPBody:requestBodyData];
        
    NSURLConnection *c = [[NSURLConnection alloc] initWithRequest:rq delegate:self];
    [c start];
}
Als Antwort erhalte ich eine Page, die mir sagt, dass ich keinen Zugriff auf diese Seite habe. Also hat was nicht geklappt.

Mein Header, den ich via POST abschicke, sieht so aus:

Code:
2013-01-28 18:07:11.351 [23806:c07] {
    "Content-Length" = 75;
    "Content-Type" = "application/x-www-form-urlencoded";
    Cookie = "bbsessionhash=asdf; path=/; HttpOnly, bbuserid=asdf; expires=Tue, 28-Jan-2014 17:07:09 GMT; path=/; HttpOnly, bbpassword=asdf; expires=Tue, 28-Jan-2014 17:07:09 GMT; path=/; HttpOnly, IDstack=3326759; expires=Tue, 28-May-2013 17:07:09 GMT; path=/, bbsessionhash=asdf; path=/; HttpOnly, epvp_backend=s6";
    "User-Agent" = "Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0";
}
Mein Request-Body sieht so aus:
Code:
NSString *requestBodyString = [NSString stringWithFormat:@"title=Megatreasure&content=superdupertreasure&cost=10&createtreasure=submit"];
Da ich beim Login und beim Treasure erstellen die selbe Funktion (auch zum Umwandeln des Strings) nutze, sollte der requestBodyString kein großes Problem darstellen.

-> Fehlt etwas im POST-Header? Oder evtl. im Body? Ist der Fehler irgendwo offensichtlich und ich bin zu doof?

Oh, und der String für die Treasure-URL:
Code:
const NSString *createTreasure = @"http://elitepvpers.com/theblackmarket/treasures/";
Würde mich über Hilfe freuen :)

Grüße
01/29/2013 02:21 Raz9r#2
Wenn das Problem Errorcode 304 hat, solltest du dir einmal die Dokumentation von NSURLRequestReloadIgnoringLocalCacheData anschauen. ;-)
01/29/2013 12:31 snow#3
Ein Error als solcher wird leider gar nicht ausgegeben, ich bekomme als Antwort halt eine HTML-Page, die mir sagt, dass ich keine Erlaubnis habe, auf die Seite zuzugreifen. :/
01/29/2013 13:04 Raz9r#4
Probier es vielleicht mal mit NSURLRequestReloadIgnoringLocalCacheData anstelle von NSURLRequestReloadIgnoringLocalAndRemoteCacheData. Bist du dir sicher, dass du den *Ingoring*RemoteCacheData-Teil davon brauchst?
Ich hatte nämlich selbst mit NSURLRequestReloadIgnoringLocalCacheData nie Probleme, habe testweise dann einmal auf NSURLRequestReloadIgnoringLocalAndRemoteCacheData umgestellt und einen 304 Error bekommen.
01/29/2013 16:17 snow#5
Geht immer noch nicht. :/
"You don't have permission to access this page."

:(
02/05/2013 13:28 'Henry.#6
Bist du dir sicher das du die richtige Session-id und die richtige User-Kennung mitschickst?
02/05/2013 15:26 snow#7
Ja.
Einloggen funktioniert, Nachrichten etc. laden funktioniert, was nicht funktioniert ist, ist z.B. Treasure erstellen, Treasure löschen etc. :/
02/05/2013 16:26 tolio#8
was mir da noch einfallen würde ist aber du sicher bist das du an den richtigen stellen post bzw get nutz
02/05/2013 16:36 snow#9
Ja, extra mit LiveHTTPHeaders überprüft.

//

LOL! Gerade habe ich den String noch einmal neu geschrieben und jetzt geht das löschen. :o
Bin mal gespannt, ob das Erstellen jetzt auch geht...

Ich nutze übrigens ASIHTTPRequest.

EDIT: ATOMLOL! Jetzt geht auch das Erstellen. ô_o
02/05/2013 21:47 'Henry.#10
p.s. nur mal so hat zwar jetzt wenig mit dem thema zu tun. Aber ich hatte es auch schon das manche Pakete in LiveHTTPHeaders nicht angezeigt wurden, also mache ich meistens ne Gegenprobe mit z.B. firebug
02/05/2013 22:25 snow#11
Mit Firebug habe ich natürlich auch geschaut, was alles übertragen wird. Ich denke, es lag an einem fehlenden "/" oder so. :<

Danke an alle, die versucht haben zu helfen, hier kann jetzt zugemacht werden. :)