簡體   English   中英

通過http-conduit-0.1.9.3訪問Mt Gox API:查詢字符串導致超時

[英]Accessing Mt Gox API via http-conduit-0.1.9.3: query string causes timeout

我正在嘗試使用http-conduit訪問Mt Gox REST API。 僅具有路徑的查詢(例如https://data.mtgox.com/api/2/BTCUSD/money/ticker )可以正常工作,但是當我向請求中添加queryString時,它會超時。

所以這有效:

mtGoxRequest :: String -> QueryText -> Request m
mtGoxRequest p qt = def {
   secure = True,
   host = "data.mtgox.com",
   port = 443,
   method = "GET",
   path = fromString $ "api/2/" ++ p,
   queryString = renderQuery False $ queryTextToQuery qt,
   responseTimeout = Just 10000000
}

currencyTicker :: Request m
currencyTicker = mtGoxRequest "BTCUSD/money/ticker" []

但這超時了:

tradeStream :: Currency -> UTCTime -> Request m
tradeStream t = mtGoxRequest
   "BTCUSD/money/trades/fetch"
   [("since", Just $ T.pack $ utcToGoxTime t)]

區別似乎在於對queryString的使用:當我將假查詢“ foo = bar”添加到也超時的currencyTicker時。

但是,所有這些操作在Web瀏覽器中都可以正常工作:轉到https://data.mtgox.com/api/2/BTCUSD/money/ticker?foo=bar立即返回正確的錯誤消息,而不是超時。 交易提取網址也能正常工作,盡管我不會包含鏈接,因為“自”參數說明了可追溯的距離。 相反,如果我從交易列表請求中刪除queryString,它將正確返回整個可用交易歷史記錄。

因此,關於http-conduit查詢字符串的內容顯然有所不同。 有人知道這可能是什么嗎?

這是發送的Haskell請求對象(如“顯示”所示):

Request {
  host                 = "data.mtgox.com"
  port                 = 443
  secure               = True
  clientCertificates   = []
  requestHeaders       = []
  path                 = "api/2/BTCUSD/money/trades/fetch"
  queryString          = "since=1367142721624293"
  requestBody          = RequestBodyLBS Empty
  method               = "GET"
  proxy                = Nothing
  rawBody              = False
  redirectCount        = 10
  responseTimeout      = Just 10000000
}

根據返回的標頭,Mt Gox正在使用cloudflare-nginx和PHP 5。

編輯:忘了提到,當我使用http-conduit將帶有queryString的請求發送到http://scooterlabs.com/echo時,我也得到了正確的響應,因此似乎是Mt Gox網絡服務器與HTTP的管道。

明白了。 您需要添加用戶代理字符串。 所以

requestHeaders = [(CI.mk "User-Agent", "Test/0.0.1")],

在request函數的中間使其起作用。

$ time curl https://data.mtgox.com/api/2/BTCUSD/money/trades/fetch?since=1367142721624293
...
real    0m20.993s

在我看來,一切都工作正常:API調用需要一段時間才能返回,因此http-conduit會引發超時異常,因為20s大於10s。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM