2016-03-06 124 views
0

我試圖將用戶狀態更新發布到Goodreads API。調試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) 
     } 
    ) 

(註釋掉的部分替代品我都試過不成功)

我打印該被簽署的基本字符串和對於那些工作的電話和不工作的電話看起來是一樣的,顯然,noncetimestamp除外。

標題中還包含oauth_signature,它每次都會更改,有時還包含由OAuthSwift編碼的字符,因此可能會導致只在某些時間工作的調用(它只有在簽名不可用時才起作用) t包含某個字符)......但是我也打印出了標題,並且我看不到任何模式或工作的標題與不工作的標題之間的明顯區別。

所以現在我不知道要測試什麼了......我正在檢查基本字符串和標題的呼叫工作和呼叫不,他們看起來是一樣的......任何人都可以想到別的東西通話之間的變化,我應該檢查?我不知道是什麼原因造成的,我不知道如何調試它。

由於提前,

丹尼爾


編輯:很奇怪......我想我的要求有爪子,一臺Mac REST客戶端,並與Chrome的郵差擴展。如果我使用https,我會在第一個電話上收到404,然後在第二個電話上顯示201,然後在第三個上顯示404,在第四個上顯示201,依此類推。它每隔一段時間都有效。如果我使用http或https,它的工作時間並不重要,只要前面有一個失敗的https請求,它就會工作。

所以,我想在我的應用程序做同樣的:我添加了兩個HTTPS調用一個接一個......在我的應用總是返回404

所以它看起來像郵差,爪子和OAuthSwift以不同的處理請求。我不知道這些客戶端之間可能有什麼區別......簽名庫字符串似乎對所有三個客戶端都是一樣的,標頭也是如此......那麼他們之間還有什麼可以改變呢?

+0

至於客戶端之間的差異。爪子只會發送你定義的頭文件。在postman中,如果您檢查發送的原始HTTP(使用charles代理),那麼會發送很多額外的頭文件,這就是爲什麼在Paw中我們編寫了自己的自定義HTTP庫文件以確保您編寫的內容正是我們發送的內容。 https://paw.cloud/docs/advanced/http-libraries –

回答

0

在較新版本的Xcode中,您只能與HTTPS服務器通信。我期望Google支持,以便您可以更改網址。或者你可以編輯你的Info.plist文件。

應用傳輸安全設置>允許任意負載>是

+0

我已經將Goodreads設置爲應用程序傳輸安全設置中的異常域...現在,我還將允許任意負載設置爲YES,但仍然無效。 :/另外我不認爲這會在某些時候解釋請求,對吧? – dbmrq

+0

如果您嘗試通過構建完整的URL並在瀏覽器中運行它來手動調用它,會發生什麼情況?每次都有效嗎?這應該確認查詢是正確的。我看到的另一個問題是iOS緩存查詢。它似乎有一個約20秒的緩存(我在創建的實時聊天應用程序中看到了這一點)。我必須通過添加每次隨機/不同的額外變量來使調用獨一無二。 – PlatformDating

+0

奇怪......我更新了我的問題。 – dbmrq