Как указывалось в комментариях выше, я смог решить проблему самостоятельно с помощью broofa и модуля node-recaptcha, доступного по адресу https://github.com/mirhampt/node-recaptcha.
Но сначала, чтобы завершить пропущенноеподробности сверху:
- Я не использовал ни одного модуля, мое решение полностью написано самостоятельно на основе документации, доступной по адресу на сайте reCAPTCHA .
Я не отправлял заголовки запросов, так как в документации ничего не было указано.Все, что сказано относительно запроса до того, как они объяснят необходимые параметры, является следующим:
"После того, как ваша страница успешно отображает reCAPTCHA, вам необходимо настроить форму, чтобы проверить, соответствуют ли ответы, введенные пользователямиправильно. Это достигается с помощью запроса POST к http://www.google.com/recaptcha/api/verify. Ниже приведены соответствующие параметры. "
- «Как проверить ответ пользователя» в http://code.google.com/apis/recaptcha/docs/verify.html
Итак, я сам построил строку запроса (которая состоит из одной строки, но есть модуль для этого, как я уже узнал), содержащий все параметры и отправляющий его в конечную точку API reCAPTCHA.Все, что я получил, это код ошибки invalid-site-private-key
, который на самом деле (как мы уже знаем) является неправильным способом действительно отправить 400 Bad Request
.Возможно, им следует подумать о реализации этого, тогда люди не будут удивляться, что не так с их ключами.
Это параметры заголовка, которые, очевидно, необходимы (они подразумевают, что вы отправляете форму):
Content-Length
, который должен быть длиной строки запроса Content-Type
, который должен быть application/x-www-form-urlencoded
Другая вещь, которую я узнал из Модуль node-recaptcha состоит в том, что нужно отправить строку запроса в кодировке utf8
.
Мое решение теперь выглядит так: вы можете использовать его или создать его, но обработка ошибок еще не реализована.И это написано на CoffeeScript.
http = require 'http'
module.exports.check = (remoteip, challenge, response, callback) ->
privatekey = 'placeyourprivatekeyhere'
request_body = "privatekey=#{privatekey}&remoteip=#{remoteip}&challenge=#{challenge}&response=#{response}"
response_body = ''
options =
host: 'www.google.com'
port: 80
method: 'POST'
path: '/recaptcha/api/verify'
req = http.request options, (res) ->
res.setEncoding 'utf8'
res.on 'data', (chunk) ->
response_body += chunk
res.on 'end', () ->
callback response_body.substring(0,4) == 'true'
req.setHeader 'Content-Length', request_body.length
req.setHeader 'Content-Type', 'application/x-www-form-urlencoded'
req.write request_body, 'utf8'
req.end()
Спасибо:)