无论我输入什么值作为请求的“Content-Type”,我发出的传出请求似乎都会用“application/x-www-form-urlencoded”替换它。我试图命中的应用程序需要“application/json”。基本上,我的代码如下。
{-# LANGUAGE OverloadedStrings #-}
import Network.Wreq
...
submissionResources = ["https://widgets.example.com/v2/widgets/request"]
sendWidgetToEndpoint submissionResources workingToken key widgetArray = do
let opts = defaults & header "Content-Type" .~ ["application/json"]
& header "apikey" .~ [key]
& header "Authorization" .~ [workingToken]
endPointURL = head submissionResources
widgetId = widgetArray !! 0
numberOfWidgets = widgetArray !! 1
widgetText = widgetArray !! 2
submissionResult <- postWith opts endPointURL [ "widgetId" := widgetId
, "numWidgets" := numberOfWidgets
, "widgetText" := widgetText
]
return submissionResult
我的问题是我不断Status {statusCode = 415, statusMessage = "Unsupported Media Type"}
从这个端点返回,我相信这是因为我发送的请求似乎覆盖了我的标头中的“Content-Type”。我曾尝试使用“application/json”和“text/plain”,但我得到的响应总是向我表明,我发送的所有标头看起来都符合预期,除了 Content-Type 总是变成“application/x-www” -form-urlencoded”。
如何确保 wreq 在我的请求标头中保留“Content-Type: application/json”?
编辑:我正在通过 API 服务器在回复我时告诉我的内容来确定我的原始请求中的标头。