gpt4 book ai didi

ios - 通过 JSON API Objective-C 发送 POST 请求

转载 作者:行者123 更新时间:2023-11-29 01:54:42 27 4
gpt4 key购买 nike

我正在使用 oAuth2,我正在尝试找出将登录凭据发布到 API 并接收 secret、secret_id 和 token 作为返回的最佳方式。

API 的 log_in 部分的 JSON 格式如下:

POST auth/log_in HTTP/1.1
Host: hostSite.com
Content-Type: application/JSON
Authorization: Basic Base64(client_id:client_secret)
{
"username": "email@example.com"
"password": "Purpl3H0rs3Oc3an"
"grant_type": "password"
"request_refresh": "true"
}

我要发送的登录凭据是:

 - (BOOL) loginUser
{
NSString * sUserName = [m_jsonDict valueForKey:@"username"],
* sPassword = [m_jsonDict valueForKey:@"password"],
* sJSON = [NSString stringWithFormat:@"userName: %@\npassword: %@\n",
sUserName, sPassword];

return ([self POSTUsingCommand:@"login" andData:sJSON]);
}

然后实际发送请求:

     (BOOL) POSTUsingCommand : (NSString *) sCommand
andData : (NSString *) sData
{
BOOL ret = NO;
NSString * url = [NSString stringWithFormat:CONST_PATH, NSLocalizedString(sCommand, nil)];
//hostSite.com/auth/log_in

NSString * sHTTPBody = sData;
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:15.0];

#if defined(DEBUG)
NSLog(@"--- POSTUsingCommand:\n%@\n", sHTTPBody);
#endif

// build out the post command

[request setHTTPMethod:@"POST"];
[request setValue:@"Application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"Application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPBody:[sHTTPBody dataUsingEncoding:NSUTF8StringEncoding]];

if ([NSURLConnection connectionWithRequest:request
delegate:self] == nil)
{
#if defined(DEBUG)
NSLog(@"There was a problem with initWithRequest:delegate\n");
#endif
}
else
{
ret = YES;
}

return (ret);
}

现在,在测试我的代码时,我检查了 connection:DidReceiveResponse 方法中的 response 变量。请求的状态为 400。为什么我会收到此错误是否需要完成其他设置?

最佳答案

您的sHTTPBody不是json格式。要将其获取为 json,您可以创建数据字典。然后使用json序列化将其转换为json。

根据您的数据准备字典:

NSMutableDictionary *dataDict = [NSMutableDictionary new];
[dataDict setObject:sUserName forKey:@"username"];
[dataDict setObject:sPassword forKey:@"password"];
// And so on ...

将字典转换为Json数据:

NSError *error;
NSData *postData = [NSJSONSerialization dataWithJSONObject:dataDict
options:0
error:&error];

最后发送带有json数据的post请求:

[request setHTTPBody:postData];

这应该有效。请注意此代码中的语法和小错误。我还没有测试过。您可能需要稍微调整您的方法才能使用此代码。

关于ios - 通过 JSON API Objective-C 发送 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31009155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com