iOS中的GET http请求问题

时间:2013-07-15 23:36:09

标签: iphone ios objective-c http-headers http-post

我遇到了GET请求的严重问题......

出于某种原因,当我设置一个NSString,它是一个需要传递给HTTP请求的标头的授权令牌时,授权字符串显然不会被传递。现在,每当我向Web服务器发出特定请求以获取令牌以向Web服务器发出更多请求时,就会创建此授权令牌。

因此,通过一些调试,我获取了一个授权令牌,并将NSString初始化为我收到的令牌,使字符串静态到那个令牌。然后,当我使用该SPECIFIC令牌发布帖子请求时,一切都很好..

但是当我使用由我发出的请求初始化的NSString时,标头不接受NSSString ..

对不起我的措辞......但这是我的代码:

NSLog(@"%@", setAuthenticaionKey);
NSString *authKey = [[NSString alloc] initWithFormat:@"ClientLogin auth=%@", setAuthenticaionKey];
NSLog(@"%@", authKey);
setAuthenticaionKey = @"4Pm/WijuHdJP02PcVEWOEBk+aPfB0hH+APtKgtorR/xHE3VDDenLCXVEsbi3SeLFFQHbQ7v9vP4zoAzylM9ie0FOiJq41O8i3mV9Vta/f5+Nelgegb4OoQ==";
authKey = [[NSString alloc] initWithFormat:@"ClientLogin auth=%@", setAuthenticaionKey];
NSLog(@"%@", authKey);

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"https://insight.fatspaniel.net/platform/rest/v1/user.json"]];
[request setHTTPMethod:@"GET"];
[request setValue:authKey forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

NSString *str = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"%@", str);

所以这有效,我回来了:

2013-07-15 16:29:47.221 PowerOneApp[7257:c07] {"user":{"userId":"settingj","firstName":"John","lastName":"Setting","email":"jsetting32@yahoo.com","siteListEid":1129945}}

但是当我拿出这条线时......

setAuthenticaionKey = @"4Pm/WijuHdJP02PcVEWOEBk+aPfB0hH+APtKgtorR/xHE3VDDenLCXVEsbi3SeLFFQHbQ7v9vP4zoAzylM9ie0FOiJq41O8i3mV9Vta/f5+Nelgegb4OoQ=="; // the static nsstring

我得到了回复:

2013-07-15 16:31:00.160 PowerOneApp[7282:c07] {"unexpectedException":{"reason":"E-AZNInject-azn.1-","message":"No Authorization header.  ","code":"REQUEST_INVALID"}}

现在我将静态令牌与动态令牌进行比较,动态令牌不断重新分配给setAuthenticationKey字符串变量,并将它们作为以下内容进行比较:

2013-07-15 16:31:41.931 PowerOneApp[7300:c07] ClientLogin auth=jqsWR0RLoolfBNFwWAUM0W7NHSLs67i4h3xblbDDlfNHE3VDDenLCXVEsbi3SeLFFQHbQ7v9vP4zoAzylM9ie0FOiJq41O8ij8/zTwyBOpswf8czwtNuWg==
2013-07-15 16:31:41.931 PowerOneApp[7300:c07] ClientLogin auth=4Pm/WijuHdJP02PcVEWOEBk+aPfB0hH+APtKgtorR/xHE3VDDenLCXVEsbi3SeLFFQHbQ7v9vP4zoAzylM9ie0FOiJq41O8i3mV9Vta/f5+Nelgegb4OoQ==

请注意,它们的长度相同且以“==”结尾。我还使用WireShark检查标头是否正确发布,但是当我使用静态令牌时,所有内容都会被发布,当我不使用静态令牌时,没有任何内容发布到授权令牌HTTPheaderfield的该字段。此外,我在设置任何标头之前记录标记字符串,然后我实际上得到一个完整的标记字符串,所以它只是因为一些奇怪的原因而没有发布...

1 个答案:

答案 0 :(得分:0)

问题解决了......

显然,当我检查两个单独字符串的计数时,动态分配的令牌返回121的计数,而静态令牌返回120 ....

所以我用它来解决这个问题:

NSString *anotherNewString = [newStr substringToIndex:[newStr length] - 1];

现在,字符串返回120个字符,http请求现在将字符串识别为实际的标题类型....