3

これは、重要な情報または何かを見逃している可能性が高いですが、ここに行きます.

現在、 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 シンクホールを使用すると、ヘッダーが のように形成されていることがわかりますHTTP_X_OAUTH_BASICHTTPビットが前にあるはずはありません。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

the header does not appear there , これは、シンクホールが x-headers を検出していないことを示唆しています。curl の例は、目的のエンドポイントである github API でも機能するため、curl のアプローチは正しく、HTTP.Conduit のアプローチは正しくないことがわかります。

だから私の質問は、HTTP.Conduit ヘッダーを、取得してx-headerいる現在の代わりに curls などの として表示するにはどうすればよいhttp-x-headerですか?

また、心配しないでください。使用されている github キーは実際のキーではありません...

アップデートして修正

したがって、Michael Snoymans の回答へのコメントで述べたように、別のヘッダーを使用することで解決されまし("Authorization", "token " <> (encodeUtf8 githubKey))<token>:x-oauth-basic

タイトルをもう少し適切に更新しようとしましたが、提案は受け付けています...

助けてくれてありがとう!

4

1 に答える 1