【问题标题】:How to pass parameters in url?如何在url中传递参数?
【发布时间】:2015-04-03 15:39:24
【问题描述】:

我是 IOS 开发的新手。 我正在请求具有 POST 方法的 Web 服务,并在标题中接受两个参数密码和确认。 这是网址 https://abc.xyz.eu/pqr/Api 这是方法 api/Account/ChangePassword?password={password}&confirmation={confirmation}

如何调用这个方法 我尝试了很多代码,但得到 400,401,404 错误

最后我通过使用基本身份验证在 chrome 中获得 200 个状态代码。现在的问题是我很困惑如何传递基本身份验证和标头参数的值 请帮帮我`

        NSString *UrlWithParameters=[NSString stringWithFormat:@"https://abc.xyz.eu/abc/api/Account/ChangePassword?"];
        NSURL *ServiceURL =[NSURL URLWithString:UrlWithParameters];
        NSMutableURLRequest * request =[NSMutableURLRequest requestWithURL:ServiceURL];

        NSString *post = [NSString stringWithFormat:@"password=%@&confirmation=%@",self.txtNewPassord.text,self.txtConPassord.text];
        NSData* postData = [post dataUsingEncoding:NSUTF8StringEncoding];

        [request setHTTPMethod:@"POST"];

        NSString *authValue = [NSString stringWithFormat:@"Basic %@",self.appDelegate.UserPasswordBase64];
        [request setValue:authValue forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"accept"];
        [request setValue:@"application/json" forHTTPHeaderField:@"content-type"];

        [request setHTTPBody:postData];

        NSURLResponse *response;
        NSError *err;
        NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];

`

【问题讨论】:

  • 向我们展示您的代码,您是如何发送 HTTP 请求的?
  • 你是否像这样正确绑定密码和确认值 NSString *temp = [NSString stringWithFormat:@"api/Account/ChangePassword?password=%@&confirmation=%@",pw,confirm]]
  • 您是否尝试删除“[serviceRequest setValue:@"application/json" forHTTPHeaderField:@"content-type"];" ?毕竟你不是在发送 json 内容......
  • 我试过它给我显示 404 错误,而且该方法支持 json 响应

标签: ios iphone ios7


【解决方案1】:

如果您收到 401 错误,则表示您未经授权。 API 调用似乎很奇怪,因为您没有发送任何授权信息。如果不是您的服务,请先尝试从浏览器、CLI 或任何 REST 客户端检查此 API。如果它是您的服务器,请检查服务器日志,它如何尝试路由您的呼叫。例如,问题可能出在 URL 编码中。

【讨论】:

  • 我在 NSString *authValue = [NSString stringWithFormat:@"Basic %@",check] 之前添加了这个[serviceRequest setValue:authValue forHTTPHeaderField:@"Authorization"];检查字符串是base64格式编码的用户名和密码
  • 我是认真的。试试这个工具,它允许测试请求,并设置身份验证头 - chrome.google.com/webstore/detail/advanced-rest-client/…
  • 它应该在浏览器中工作。当它在那里工作时,然后转移到 iOS
【解决方案2】:

尝试使用AFNetworking,它是最棒的 iOS 网络库(而且是开源的!)

有了它,这可能会奏效:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"password": @"xxx", @"confirmation": @"yyy"};
[manager POST:@"https://abc.xyz.eu/pqr/api/Account/ChangePassword" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

【讨论】:

  • 我不熟悉 AFNetworking 。我正在学习,但这部分对我来说很棘手。
  • 这是发出任何和所有 URL 请求的最简单方法 :) 你熟悉如何在 XCode 中安装第三方库吗?
  • 是的,我可以安装第三方代码,我也尝试使用 Afnetworking,但没有得到我的运气。请您提供了解 AFNetworking 的链接。
  • 我已经链接到 AFNetworking 存储库,它有各种工作示例。如果这对你没有意义,我会看这里stackoverflow.com/questions/10943635/…
猜你喜欢
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2013-11-21
  • 2012-06-12
  • 2014-04-08
相关资源
最近更新 更多