将自定义标头添加到 AFNetworking,我做错了啥?

Posted

技术标签:

【中文标题】将自定义标头添加到 AFNetworking,我做错了啥?【英文标题】:Add custom header to AFNetworking, what am I dong wrong?将自定义标头添加到 AFNetworking,我做错了什么? 【发布时间】:2014-03-14 15:34:33 【问题描述】:

curl 方法如下所示,我正在向 AFNetworking 添加自定义标头,如下所示。但是 curl 方法有效,但 AFNetworking 无效。我做错了什么?

卷曲方法:

curl https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails \
 -H "X-PAYPAL-SECURITY-USERID: someUserId" \
 -H "X-PAYPAL-SECURITY-PASSWORD: somePassword" \
 -H "X-PAYPAL-SECURITY-SIGNATURE: someSignature" \
 -H "X-PAYPAL-APPLICATION-ID: someAPPID" \
 -H "X-PAYPAL-REQUEST-DATA-FORMAT: NV" \
 -H "X-PAYPAL-RESPONSE-DATA-FORMAT: NV" \
 -d "payKey=someAPPKEY&requestEnvelope.errorLanguage=en_US"

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:kPaypalClientId forHTTPHeaderField:@"X-PAYPAL-SECURITY-USERID"];
[manager.requestSerializer setValue:kPaypalPassword forHTTPHeaderField:@"X-PAYPAL-SECURITY-PASSWORD"];
[manager.requestSerializer setValue:kPaypalSignature forHTTPHeaderField:@"X-PAYPAL-SECURITY-SIGNATURE"];
[manager.requestSerializer setValue:appId forHTTPHeaderField:@"X-PAYPAL-APPLICATION-ID"];
[manager.requestSerializer setValue:@"NV" forHTTPHeaderField:@"X-PAYPAL-REQUEST-DATA-FORMAT"];
[manager.requestSerializer setValue:@"json" forHTTPHeaderField:@"X-PAYPAL-RESPONSE-DATA-FORMAT"];

[manager GET:@"https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails" parameters:@@"payKey": payKey, @"requestEnvelope.errorLanguage": @"en_US" success:^(AFHTTPRequestOperation *operation, id responseObject) 
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

我没有从失败块中得到错误。但这返回为 responseObject 但如果我使用上面的 curl 方法。它的反应是成功。和header的值是一样的:


    error =     (
                
            category = Application;
            domain = PLATFORM;
            errorId = 520003;
            message = "Authentication failed. API credentials are incorrect.";
            severity = Error;
            subdomain = Application;
        
    );
    responseEnvelope =     
        ack = Failure;
        build = 9641252;
        correlationId = 8f5818a80ec65;
        timestamp = "2014-02-14T22:37:30.448-08:00";
    ;

【问题讨论】:

你能添加NSError的描述吗? 没有网络错误。只是返回了贝宝错误。这是否意味着该值未发送到贝宝服务器? 你能把这行的值贴出来吗? NSLog(@"Error: %@", error); 您正在设置正确的标题,响应是什么? @jbouaziz 我没有从失败块中得到错误。 【参考方案1】:

您在 curl 中发送 POST 请求,在 AFNetworking 中发送 GET 请求,请使用 -v 检查您的 curl 请求。

【讨论】:

我遇到了同样的错误。身份验证失败。 API 凭据不正确。甚至我已经用 post 请求替换了 get。 我对paypal api不是很熟悉。您是否更新了 X-PAYPAL-REQUEST-DATA-FORMAT 字段?导致您将参数作为 json 正文发送 我使用 X-PAYPAL-REQUEST-DATA-FORMAT 的默认 NV 值,它是从 paypal 的开发人员文档中复制的。我应该将其更改为 json 还是其他?【参考方案2】:

我用 NSURSSession 重写了它,它成功了。看来我用 AfNetWorking 没弄好。

【讨论】:

以上是关于将自定义标头添加到 AFNetworking,我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

php 将自定义CSS文件添加到标头中

如何以角度将自定义标头添加到httpRequest

如何将自定义 HTTP 请求标头添加到 Thymeleaf 生成的表单或链接?

如何将自定义响应标头添加到来自 azure blob 的响应?

如何在 PowerShell 中运行 appCmd 以将自定义标头添加到默认网站

php 将自定义文本元素添加到Storefront Powerpack的标头配置器中