我试图将用户状态更新发布到Goodreads API。
大部分时间我的请求都返回200 OK并且什么都不做。但是,它会不时地返回201 Created并更新状态。当它运行时,它总是我第一次在iOS模拟器中运行应用程序后尝试拨打电话。后续的电话永远不会奏效。
我认为问题不在于API本身,因为官方的Goodreads iOS应用程序使用相同的调用,它始终有效。
他们的API以参数中包含括号的调用出现问题而闻名,但我可以进行包含括号的其他调用,但它们工作正常,问题就在于此。
我正在使用OAuthSwift,这是我的代码:
oAuth.client.post(
"http://www.goodreads.com/user_status",//.xml",//?user_status[book_id]=6366035&user_status[page]=168",
parameters: ["user_status[page]" : 168, "user_status[book_id]" : 6366035, "format" : "xml"],
//headers: ["Content-Type" : "application/x-www-form-urlencoded"],
success: {
data, response in
print("")
print(response)
},
failure: {
error in
print("")
print(error)
}
)
(注释掉的部分是我尝试过的替代方案。)
我正在打印已签名的基本字符串,除了nonce
和timestamp
之外,对于有效的通话和不通话的通话看起来相同,显然。
在标题中还包含oauth_signature
,它每次都会更改,有时会包含由OAuthSwift编码的字符,这样可以在某些时候考虑到呼叫的工作(它只能在签名不包含某个字符)...但我也打印出标题,我也看不到任何模式或有效调用标题与调用标题之间的任何明显差异那不是。
所以现在我不知道要测试什么...我正在检查基本字符串和标题以查找有效的通话和不通话的电话,它们看起来一样......任何人都可以想一想在通话之间发生变化的其他事情,我应该检查一下?我不知道是什么导致这种情况,我不知道如何调试它。
提前致谢,
丹尼尔
编辑:非常奇怪......我用Paw,一个Mac REST客户端和Chrome的Postman扩展程序尝试了我的请求。如果我使用https,我在第一次通话时获得404,第二次是201,第三次是404,第四次是201,依此类推。它每隔一段时间都有效。如果我使用http或https,它的工作时间并不重要,只要之前有一个失败的https请求,它就会起作用。
所以我尝试在我的应用程序中执行相同的操作:我一个接一个地添加了两个https调用...在我的应用程序中,它们总是返回404。
所以似乎Postman,Paw和OAuthSwift以不同方式处理请求。我不知道这些客户之间可能有什么不同......签名基本字符串对于所有三个来说似乎都是相同的,标题也是......那么它们之间还有什么可以改变呢?
答案 0 :(得分:0)
在较新版本的Xcode中,您只能与HTTPS服务器通信。我希望Google支持您,以便您可以更改网址。或者您可以编辑Info.plist文件。
应用传输安全设置>允许任意负载>是