0

我对 GET 请求有一个严重的问题......

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

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

但是当我使用由我发出的请求初始化的 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 的该字段。此外,我在设置任何标头之前记录令牌字符串,实际上我得到了一个完整的令牌字符串,所以它只是因为一些奇怪的原因而没有发布......

4

1 回答 1

0

问题解决了...

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

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

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

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

于 2013-07-15T23:54:17.700 回答