这很可能是我错过了一些重要的信息或其他东西,但这里有。
目前我正在尝试使用HTTP.Conduit库将我自己的标头插入x-oauth-basic
到我的 HTTP 请求中。它有点工作,但不是我想要的方式,
submitPostRequest urlString githubKey body =
case parseUrl urlString of
Nothing -> return $ "URL Syntax Error"
Just initReq -> withManager $ \manager -> do
let req = initReq { secure = False -- Turn on https
, method = "POST"
, requestHeaders = [("x-oauth-basic", (encodeUtf8 githubKey))]
<> [("User-Agent", "HsCMS")]
, requestBody = RequestBodyBS (toStrict body)
, checkStatus = \_ _ _ -> Nothing
}
res <- httpLbs req manager
return $ responseBody res
重要的一点是
requestHeaders = [("x-oauth-basic", (encodeUtf8 githubKey))]
<> [("User-Agent", "HsCMS")]
使用HTTP sinkhole,我可以看到标头形成为HTTP_X_OAUTH_BASIC
. 它不应该有HTTP
前面的位。使用 curl 进行测试,
curl -u 78y8713k1j23nkjnkjnuy366366363666gdasddd:x-oauth-basic --request POST --data '{"description":"Updated via API","files":{"file1.txt":{"filename": "newsies.txt", "content":"New Demo"}}' http://www.posttestserver.com/post.php\?dir\=Testing
标头没有出现在那里,这表明天坑没有拾取 x 标头。curl 示例也适用于我的预期端点,即 github API,因此我知道 curl 方法是正确的,而我的 HTTP.Conduit 方法不是。
所以我的问题是,如何让我的 HTTP.Conduit 标头显示为一个x-header
,例如 curls',而不是http-x-header
我得到的电流?
另外,不用担心,使用的 github 密钥不是实际密钥...
更新和修复
因此,正如对 Michael Snoymans 回答的评论中提到的那样,它通过使用不同的标头来解决,即("Authorization", "token " <> (encodeUtf8 githubKey))
这显然是 CURL 在执行时发送的内容<token>:x-oauth-basic
。
我试图更新标题以使其更适合一些,但我愿意接受建议......
感谢所有的帮助!