Ich habe einen WCF-Dienst gehostet und ich versuche, es als JSON POST-Anfrage innerhalb einer iPhone App zu verwenden. Ich plane später die JSON Serializer auf verwenden, aber das ist, was ich für die Anforderung haben:JSON POST-Anfrage auf dem iPhone (mit HTTPS)
NSString *jsonRequest = @"{\"username\":\"user\",\"password\":\"letmein\"}";
NSLog(@"Request: %@", jsonRequest);
NSURL *url = [NSURL URLWithString:@"https://mydomain.com/Method/"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
[NSURLConnection connectionWithRequest:[request autorelease] delegate:self];
In meiner Daten empfangen ich drucke es nur auf der Konsole:
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSMutableData *d = [[NSMutableData data] retain];
[d appendData:data];
NSString *a = [[NSString alloc] initWithData:d encoding:NSASCIIStringEncoding];
NSLog(@"Data: %@", a);
}
Und innerhalb dieser Antwort Ich erhalte diese Nachricht:
Data: <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Request Error</title>
<style>
<!-- I've took this out as there's lots of it and it's not relevant! -->
</style>
</head>
<body>
<div id="content">
<p class="heading1">Request Error</p>
<p xmlns="">The server encountered an error processing the request. Please see the <a rel="help-page" href="https://mydomain.com/Method/help">service help page</a> for constructing valid requests to the service.</p>
</div>
</body>
</html>
Weiß jemand, warum das passiert und wo ich falsch liege?
Ich habe gelesen, über ASIHTTPPost stattdessen verwenden, aber ich kann die Demo laufen in iOS4 nicht bekommen :(
Dank
EDIT:
ich CharlesProxy zu sniff nur verwendet haben sie heraus, was passiert, wenn ich aus dem iPhone (Simulator) nennen und das ist, was es gab mir:
Das einzige, was seltsam ich bemerkt habe, ist es sagt " SSL Proxying nicht für diesen Host aktiviert: Aktivieren Sie unter Proxy-Einstellungen, SSL-Speicherorte ". Weiß jemand was das bedeutet?
(Dies geschieht auch in meinem Windows-Client).
Ich habe gerade dies auf meinem Windows-Client ausgeführt und das einzige, was anders ist, ist der Request and Response-Text, der verschlüsselt ist. Fehle ich etwas, um eine sichere HTTP-Verbindung zu verwenden?
NEU EDIT: Dies funktioniert mit einer Nicht-HTTPS-Anfrage wie: http://maps.googleapis.com/maps/api/geocode/json?address=UK&sensor=true. Ich schätze, das Problem besteht darin, dass das iPhone den POST ordnungsgemäß über SSL sendet.
Ich benutze auch diese Methoden:
- (void) connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
{
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]
forAuthenticationChallenge:challenge];
}
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
- (void) connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace
{
if([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust])
{
return YES;
}
}
Dies ermöglicht es mir, so weit zu kommen. Wenn ich sie nicht benutze, erhalte ich eine Fehlermeldung, die besagt:
Das Zertifikat für diesen Server ist ungültig. Möglicherweise stellen Sie eine Verbindung zu einem Server her, der sich als "mydomain.com" ausgibt, wodurch Ihre vertraulichen Informationen gefährdet werden könnten.
Können Sie die Protokolle in Ihrem Server sehen, wenn sie etwas Interessantes darin haben? – willcodejavaforfood
Ich habe im Moment keinen Zugriff darauf. Ich weiß, dass der Dienst jedoch mit anderen Clients eingerichtet und betrieben wird. –