Ich versuche, einen HTTP-Beitrag mit der von mir entwickelten iOS-Anwendung zu senden, aber der Push erreicht den Server nie, obwohl ich als Antwort einen Code 200 erhalte (von der URL-Verbindung). Ich bekomme nie eine Antwort vom Server und der Server erkennt meine Beiträge nicht (der Server erkennt Beiträge von Android).
Ich benutze ARC, habe aber pd und urlConnection als stark eingestellt.
Dies ist mein Code zum Senden der Anfrage
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]
initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",dk.baseURL,@"daantest"]]];
[request setHTTPMethod:@"POST"];
[request setValue:@"text/xml"
forHTTPHeaderField:@"Content-type"];
NSString *sendString = @"<data><item>Item 1</item><item>Item 2</item></data>";
[request setValue:[NSString stringWithFormat:@"%d", [sendString length]] forHTTPHeaderField:@"Content-length"];
[request setHTTPBody:[sendString dataUsingEncoding:NSUTF8StringEncoding]];
PushDelegate *pushd = [[PushDelegate alloc] init];
pd = pushd;
urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:pd];
[urlConnection start];
Dies ist mein Code für den Delegierten
#import "PushDelegate.h"
@implementation PushDelegate
@synthesize data;
-(id) init
{
if(self = [super init])
{
data = [[NSMutableData alloc]init];
[data setLength:0];
}
return self;
}
- (void)connection:(NSURLConnection *)connection didWriteData:(long long)bytesWritten totalBytesWritten:(long long)totalBytesWritten
{
NSLog(@"didwriteData push");
}
- (void)connectionDidResumeDownloading:(NSURLConnection *)connection totalBytesWritten:(long long)totalBytesWritten expectedTotalBytes:(long long)expectedTotalBytes
{
NSLog(@"connectionDidResumeDownloading push");
}
- (void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL
{
NSLog(@"didfinish push @push %@",data);
}
- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
{
NSLog(@"did send body");
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[self.data setLength:0];
NSHTTPURLResponse *resp= (NSHTTPURLResponse *) response;
NSLog(@"got response with status @push %d",[resp statusCode]);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d
{
[self.data appendData:d];
NSLog(@"recieved data @push %@", data);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];
NSLog(@"didfinishLoading%@",responseText);
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error ", @"")
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", @"")
otherButtonTitles:nil] show];
NSLog(@"failed &push");
}
// Handle basic authentication challenge if needed
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
NSLog(@"credentials requested");
NSString *username = @"username";
NSString *password = @"password";
NSURLCredential *credential = [NSURLCredential credentialWithUser:username
password:password
persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}
@end
Die Konsole druckt immer die folgenden Zeilen und nur die folgenden Zeilen:
2013-04-01 20:35:04.341 ApprenticeXM[3423:907] did send body
2013-04-01 20:35:04.481 ApprenticeXM[3423:907] got response with status @push 200
2013-04-01 20:35:04.484 ApprenticeXM[3423:907] didfinish push @push <>
quelle
quelle
Ich bin mir nicht sicher warum, aber sobald ich die folgende Methode auskommentiere, funktioniert es:
Außerdem glaube ich nicht, dass Sie die Methoden aus dem NSUrlConnectionDownloadDelegate-Protokoll benötigen, sondern nur die aus NSURLConnectionDataDelegate, es sei denn, Sie möchten einige Download-Informationen.
quelle
Hier ist die Methode, die ich in meiner Protokollierungsbibliothek verwendet habe: https://github.com/goktugyil/QorumLogs
Diese Methode füllt HTML-Formulare in Google Forms aus. Hoffe, es hilft jemandem, der Swift benutzt.
quelle
Senden einer HTTP-POST-Anfrage unter iOS (Ziel c):
quelle
Mit Swift 3 oder 4 können Sie auf diese http-Anforderung für eine getrennte Kommunikation zugreifen.
// POST-Daten anfordern
// Um die Daten von der Anfrage zu erhalten
// Um den Download-Inhalt wie Bild oder Video von der Anfrage zu erhalten
quelle
Ziel c
JSON-Antwort : {"status": "success", "user_id": "58", "user_name": "dilip", "result": "Sie wurden erfolgreich angemeldet"} Arbeitscode
** **.
quelle