4 Stimmen

Abrufen von rohen HTTP-Anfragen aus CFHTTPMessageRef

Ich arbeite mit einer Wrapper-Klasse für CFHTTPMessage die eine CFHTTPMessageRef Objekt, zu dem die Methode (GET), die URL des Webanwendungsservers und einige benutzerdefinierte Header mit dem Datum und einer Authentifizierungs-Nonce hinzugefügt werden.

Ich habe einige Probleme mit der Methode und der URL, die bestimmte Daten zurückgeben. Ich glaube, ich habe den Authentifizierungs-Nonce herausgefunden.

Ich möchte dieses Problem beheben, indem ich mir die Rohanforderung an die Webanwendung ansehe und sicherstelle, dass alles richtig formatiert ist.

Meine Frage ist: Wenn ich eine CFHTTPMessageRef Objekt (z.B. messageRef ), gibt es eine Möglichkeit, die rohe HTTP-Anfrage zu protokollieren, die aus dieser Nachricht kommt?

Ich habe Folgendes versucht, aber ich erhalte eine EXC_BAD_ACCESS Signal, wenn ich versuche, auf seine Bytes zuzugreifen:

CFDataRef messageData = CFHTTPMessageCopyBody(messageRef);

Danke für jeden Rat.

Ist es alternativ möglich, einen Paket-Sniffer in einem Wählnetz zu verwenden? Ich kann Folgendes ausführen ettercap auf einem Laptop, aber ich weiß nicht, wie ich herausfinden kann, was mein iPhone im lokalen drahtlosen Netzwerk macht.

9voto

Alex Reynolds Punkte 93906

Das Folgende hat gut funktioniert:

NSData *d = (NSData *)CFHTTPMessageCopySerializedMessage(messageRef);
NSLog(@"%@",[[[NSString alloc] initWithBytes:[d bytes] length:[d length] encoding:NSUTF8StringEncoding] autorelease]);

Ich hoffe, dies ist für andere hilfreich.

0voto

Matt Gallagher Punkte 14710

Der einzige Grund, warum Sie einen EXC_BAD_ACCESS erhalten sollten, wenn Sie auf die Bytes zugreifen, ist, wenn die messageData NULL ist (kein HTTP-Body) und Sie es derefenzieren.

Zu beachten ist, dass der HTTP-Body nicht die "rohe Anfrage" ist. Er enthält weder die Kopfzeilen noch den eigentlichen HTTP-Befehl (GET/POST/ETC). Wenn Sie den Body-Inhalt nicht festgelegt haben, ist er gleich Null.

Es ist möglich (aber weniger wahrscheinlich), dass Ihr CFHTTPMessageRef-Wert nicht richtig initialisiert ist. Überprüfen Sie dies im Debugger, indem Sie einen Haltepunkt in Ihrer CFHTTPMessageCopyBody-Zeile setzen, das Debugger-Konsolenfenster aufrufen, den Texteingabecursor auf die letzte Zeile in diesem Fenster setzen und "po messageRef" eingeben. Sie sollten eine CFTypeID-Meldung erhalten, wenn sie gültig initialisiert wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X