如何连接Haskell中的Evernote API(使用httpClient和BinaryProtocol)?

如何连接Haskell中的Evernote API(使用httpClient和BinaryProtocol)?,haskell,binary,thrift,network-protocols,evernote,Haskell,Binary,Thrift,Network Protocols,Evernote,我正在尝试在Haskell中实现Evernote同步客户端。对于初始测试,我希望使用开发人员身份验证令牌连接到Userstore。下面的代码导致异常: ProtocolExn PE\u BAD\u版本“缺少版本标识符” 导入thift.Transport.HttpClient 导入thift.Protocol.Binary 导入Network.URI 导入Data.Text.Lazy 导入系统。退出 导入UserStore\u客户端 导入用户存储\u常量 --硬编码参数以建立测试连接 auth_

我正在尝试在Haskell中实现Evernote同步客户端。对于初始测试,我希望使用开发人员身份验证令牌连接到Userstore。下面的代码导致异常:
ProtocolExn PE\u BAD\u版本“缺少版本标识符”

导入thift.Transport.HttpClient
导入thift.Protocol.Binary
导入Network.URI
导入Data.Text.Lazy
导入系统。退出
导入UserStore\u客户端
导入用户存储\u常量
--硬编码参数以建立测试连接
auth_token=--我的沙盒帐户的开发者令牌
用户_端点=”https://sandbox.evernote.com/edam/user"
main::IO()
main=do
--解析url并打开thrift http_客户端
让uri=parseURI用户\ u端点
http_客户端“不是有效的uri”
(仅uri_字符串)->执行http_cl=)
哪里
readMessageBegin p=runParser p$do

TI32 ver由于服务器返回403错误,因此引发异常。这是由于默认情况下HttpClient连接到端口80

import Thrift.Transport.HttpClient
import Thrift.Protocol.Binary
import Network.URI
import Data.Text.Lazy
import System.Exit
import UserStore_Client
import UserStore_Consts

-- hardcoded parameters to establish test connnection
auth_token = -- developer-token-for-my-sandbox-account
user_endpoint = "https://sandbox.evernote.com/edam/user"

main :: IO()
main = do
  -- parse url and open thrift http_client
  let uri = parseURI user_endpoint
  http_client <- case uri of
                    (Nothing)         -> die "Not a valid uri"
                    (Just uri_string) -> do http_cl <- (openHttpClient uri_string)
                                            return http_cl
  -- create a binary protocol that will be passed to store methods
  let user_prot = BinaryProtocol http_client

  -- try to use protocol to call a user_store method
  version_ok <- checkVersion (user_prot, user_prot) (pack auth_token) eDAM_VERSION_MAJOR eDAM_VERSION_MINOR
readMessage p = (readMessageBegin p >>=)
      where
        readMessageBegin p = runParser p $ do
          TI32 ver <- parseBinaryValue T_I32
          if ver .&. versionMask /= version1
            then throw $ ProtocolExn PE_BAD_VERSION "Missing version identifier" -- This is the error I get
            else do
              TString s <- parseBinaryValue T_STRING
              TI32 sz <- parseBinaryValue T_I32
              return (decodeUtf8 s, toEnum $ fromIntegral $ ver .&. 0xFF, sz)

    writeVal p = tWrite (getTransport p) . toLazyByteString . buildBinaryValue
    readVal p = runParser p . parseBinaryValue