我正在嘗試使用 Vapor 發送 HTTP 請求,以驗證 recaptcha
Google 的 Captcha api定義如下:
網址:https : //www.google.com/recaptcha/api/siteverify方法:POST
| POST引數 | 描述 |
|---|---|
| 秘密 | 必需的。您的站點和 reCAPTCHA 之間的共享密鑰。 |
| 回復 | 必需的。由您站點上的 reCAPTCHA 客戶端集成提供的用戶回應令牌。 |
| 遠程IP | 選修的。用戶的 IP 地址。 |
所以我需要使用 2 個引數(秘密和回應)發出 POST 請求。
在斯威夫特我有:
func routes(_ app: Application throws {
app.on(.POST, "website_form") { req -> EventLoopFuture<View> in
var form: FromRequest = /*initial values*/
/*decode form data*/
do {
req.client.post("https://www.google.com/recaptcha/api/siteverify") { auth_req in
try auth_req.content.encode(CaptchaRequestBody(secret: "6Lfoo98dAAAAALRlUoTH9LhZukUHRPzO__2L0k3y", response: form.recaptcha_response), as: .formData)
auth_req.headers = ["Content-Type": "application/x-www-form-urlencoded"]
}.whenSuccess { resp_val in
print("Response: \(resp_val)")
}
}
}
/* More code */
}
struct CaptchaRequestBody: Content {
let secret: String
let response: String
}
運行發布請求后,我收到以下錯誤代碼:
{
"success": false,
"error-codes": [
"missing-input-secret"
]
}
我找不到任何有效的解決方案,即使官方的 Vapor 檔案也沒有用,有人可以幫我嗎?
uj5u.com熱心網友回復:
Google API 要求請求是 URL 編碼的表單。通過使用該.formData設定,您將強制執行 MultiPart。
將設定更改為.urlEncodedForm,以確保請求符合 Google API 要求。
uj5u.com熱心網友回復:
正如尼克所說:問題是.formData我需要使用.urlEncodedForm.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405334.html
標籤:
