将 Session ID 传递给 GET Objective-C
Passing a Session ID to a GET Objective-C
所以,我必须使用方法来处理 Web 服务:
获得:
- (NSDictionary *)getDataFromURL:(NSString*)url {
NSString * serverAddress =[NSString stringWithFormat:url,mySchoolURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL
URLWithString:serverAddress]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:10
];
[request setHTTPMethod: @"GET"];
NSError *requestError = nil;
NSURLResponse *urlResponse = nil;
NSData *response = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&urlResponse
error:&requestError];
NSError* error = nil;
NSDictionary *output = [NSJSONSerialization JSONObjectWithData:response options:kNilOptions error:nil];
return output;
}
和一个POST:
-(NSData*)postData:(NSDictionary*)requestData toUrl:(NSString*)destination {
NSError *error;
NSData *postdata = [NSJSONSerialization dataWithJSONObject:requestData options:0 error:&error];
NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postdata length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:destination,mySchoolURL]]];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postdata];
[request setHTTPMethod:@"POST"];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
return nil;
}
不知何故,POST 方法的 HTTP header 确实包含 cookie 的 SessionID,而 GET 方法则没有。
我不得不承认我并不完全了解 cookie 等的内部结构,但是网络上的一些消息来源声称我根本不应该担心 cookie,因为它们是自动处理的.
无论如何,我正在与之交谈的 Web 服务在 POST 和 GET 情况下都需要一个 Session ID,所以现在我不得不开始了解发生了什么。
你们谁能帮帮我吗?
具体问题是:如何使用 GET 方法将 Session_ID 传递给 URL?
先谢谢了
好的,一种方法是将 cookie 添加到 HTTP headers。这样做时 URL 的正确性是关键。如果协议错误,则可能无法包含某些 cookie。您将需要获取所有可用的 cookie,然后使用可用的 cookie 为 headers 创建一个字典。然后您只需通过调用 setAllHTTPHeaderFields: 将这些 headers 添加到您的请求中。我在下面放置了一个简单的示例来说明如何执行此操作,但是您可以在 the Apple Documentation Class Reference
上了解有关 cookie 工作原理的更多信息
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL];
NSDictionary *headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
[request setAllHTTPHeaderFields:headers];
我真的希望这对你有所帮助。我建议您阅读 Apples 文档以尽可能多地帮助您。祝你好运!
所以,我必须使用方法来处理 Web 服务:
获得:
- (NSDictionary *)getDataFromURL:(NSString*)url {
NSString * serverAddress =[NSString stringWithFormat:url,mySchoolURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL
URLWithString:serverAddress]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:10
];
[request setHTTPMethod: @"GET"];
NSError *requestError = nil;
NSURLResponse *urlResponse = nil;
NSData *response = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&urlResponse
error:&requestError];
NSError* error = nil;
NSDictionary *output = [NSJSONSerialization JSONObjectWithData:response options:kNilOptions error:nil];
return output;
}
和一个POST:
-(NSData*)postData:(NSDictionary*)requestData toUrl:(NSString*)destination {
NSError *error;
NSData *postdata = [NSJSONSerialization dataWithJSONObject:requestData options:0 error:&error];
NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postdata length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:destination,mySchoolURL]]];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postdata];
[request setHTTPMethod:@"POST"];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
return nil;
}
不知何故,POST 方法的 HTTP header 确实包含 cookie 的 SessionID,而 GET 方法则没有。
我不得不承认我并不完全了解 cookie 等的内部结构,但是网络上的一些消息来源声称我根本不应该担心 cookie,因为它们是自动处理的.
无论如何,我正在与之交谈的 Web 服务在 POST 和 GET 情况下都需要一个 Session ID,所以现在我不得不开始了解发生了什么。
你们谁能帮帮我吗? 具体问题是:如何使用 GET 方法将 Session_ID 传递给 URL? 先谢谢了
好的,一种方法是将 cookie 添加到 HTTP headers。这样做时 URL 的正确性是关键。如果协议错误,则可能无法包含某些 cookie。您将需要获取所有可用的 cookie,然后使用可用的 cookie 为 headers 创建一个字典。然后您只需通过调用 setAllHTTPHeaderFields: 将这些 headers 添加到您的请求中。我在下面放置了一个简单的示例来说明如何执行此操作,但是您可以在 the Apple Documentation Class Reference
上了解有关 cookie 工作原理的更多信息 NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL];
NSDictionary *headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
[request setAllHTTPHeaderFields:headers];
我真的希望这对你有所帮助。我建议您阅读 Apples 文档以尽可能多地帮助您。祝你好运!