gpt4 book ai didi

ios - 在 Objective-c 中使用 GTMHTTPFetcher POST 将 GPX 文件上传到 Strava API

转载 作者:行者123 更新时间:2023-11-28 21:45:00 26 4
gpt4 key购买 nike

在探索 Strava API ( http://strava.github.io/api/v3 ) 与 GTMHTTPFetcher 的使用 2 天后,我现在完全无法将 .gpx 文件上传到我的帐户,所以我决定在这里寻求答案。我成功接收并存储了一个具有必要的“view_private,write”权限的访问 token ,服务器正在响应请求,我设法接收和更改存储在我的帐户中的数据。尝试上传 .gpx (xml) 文件时出现错误(错误请求):

The operation couldn’t be completed. (com.google.HTTPStatus error 400.)

对于构建 HTTP POST 请求显然有些事情我不明白,我尝试了不同的方法来试验 http header 中的值,在“/uploads?”之后更改了获取 url。使用 file=... 等无济于事。对于身份验证,我使用 GTMOAuth2Authentication。

我的代码:

- (void) uploadToStrava {

NSString *filePath = @"somefilepath.gpx";
NSURL *url = [NSURL URLWithString:@"https://www.strava.com/api/v3/uploads?data_type=gpx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"POST"];
[request setHTTPBody:[NSData dataWithContentsOfFile:filePath]];

[self.signedStravaAuth authorizeRequest:request];

GTMHTTPFetcher* myStravaFetcher = [GTMHTTPFetcher fetcherWithRequest:request];
[myStravaFetcher beginFetchWithDelegate:self
didFinishSelector:@selector(myStravaFetcher:finishedWithData:error:)];
self.currentFetcher = myStravaFetcher;

}

- (void) myStravaFetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)data error:(NSError *) error {
if (error != nil) {
[self handleErrorWithText:nil];
NSLog(@"error %@", [error localizedDescription]);
} else {
NSString *info = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSDictionary *result = [self.jsonParser objectWithString:info];
NSLog(@"Strava response: %@", result);
}
}

API 文档附带以下 CURL 示例请求:

$ curl -X POST https://www.strava.com/api/v3/uploads \
-H "Authorization: Bearer 83ebeabdec09f6670863766f792ead24d61fe3f9" \
-F activity_type=ride \
-F file=@test.fit \
-F data_type=fit

相关问题:Using AFNetworking to POST a file asynchronously with upload progress to Strava V3 API

最佳答案

如果您收到 HTTP 400,则表示 Strava V3 API 拒绝了您的请求 - 通常来自上传端点的 400 包含有关错误信息的响应信息。我将从检查错误响应的响应主体开始。我不熟悉 GTMHTTPFetcher,但您应该能够调试和观察响应主体,或者您可以使用像 Charles Proxy 这样的工具调试请求和响应。尝试比较 curl 请求和来自您的 Objective-C 代码的请求。

Strava V3 Uploads API 期望上传的文件部分在 file 参数中——同样,由于不熟悉 GTMHTTPFetcher,我不能确定它在做什么,但它您似乎没有指定文件数据是名为 filemultipart/form-data 部分的一部分。

远景:您似乎也在混合 POST 正文和查询字符串参数,因此您的 data_type 参数可能无法通过。我会保持一致并将所有参数放在 POST 正文中。

关于ios - 在 Objective-c 中使用 GTMHTTPFetcher POST 将 GPX 文件上传到 Strava API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30534550/

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