Я пытаюсь получить новый Google reCaptcha, работающий в моем проекте ASP.NET, и у меня возникают проблемы с его новым «Я не робот».Новый Google Recaptcha с ASP.Net
У меня был старый, и после много исследований на веб-сайте developers.google.com все выглядит одинаково (они даже указывают на загрузку одной и той же библиотеки - 1.0.5). Итак, я получил новые ключи и ввел их, и он работает, но выглядит так же, как старый reCaptcha.
Кто-нибудь получил новый, чтобы работать со своим ASP.Net? Что мне не хватает?
EDIT:
Так, играя в тестовом приложении и поиска некоторые другие веб-сайты, я обнаружил, что если я создаю страницу, как это:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>reCAPTCHA demo: Simple page</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<form id="form1" runat="server" action="?" method="POST">
<div>
<div class="g-recaptcha" data-sitekey="My Public Key"></div>
<br/>
<asp:Button ID="Button1" runat="server" Text="Submit" />
</div>
</form>
</body>
</html>
И тогда в моем коде, за (Button1_Click), я делаю это:
Dim Success As Boolean
Dim recaptchaResponse As String = request.Form("g-recaptcha-response")
If Not String.IsNullOrEmpty(recaptchaResponse) Then
Success = True
Else
Success = False
End If
recaptchaResponse
будет либо пустым, либо заполняется в зависимости от того, если y - бот или нет. Проблема в том, что теперь мне нужно принять этот ответ и отправить его в Google с помощью моего личного ключа, чтобы я мог убедиться, что ответ не был предоставлен ботом в моем коде, но я не могу понять, как это сделать. Я попробовал это (вместо Success = True
):
Dim client As New System.Net.Http.HttpClient()
client.BaseAddress = New Uri("https://www.google.com/recaptcha/")
client.DefaultRequestHeaders.Accept.Clear()
client.DefaultRequestHeaders.Accept.Add(New Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"))
Dim response As Net.Http.HttpResponseMessage = Await client.GetAsync("api/siteverify?secret=My Private key&response=" + recaptchaResponse)
If (response.IsSuccessStatusCode) Then
Dim CaptchResponse As ReCaptchaModel = Await response.Content.ReadAsAsync(Of ReCaptchaModel)()
Success = CaptchResponse.success
Else
Success = False
End If
Но я не мог понять, как получить асинхронный материал работает, и я не могу найти ничего о том, что ReCaptchaModel
, поэтому я нашел еще один способ вызова веба услуг и получить ответ JSon и попытался вместо этого:
Dim request As Net.WebRequest = Net.WebRequest.Create("https://www.google.com/recaptcha/")
Dim Data As String = "api/siteverify?secret=My Private Key&response=" + recaptchaResponse
request.Method = "POST"
request.ContentType = "application/json; charset=utf-8"
Dim postData As String = "{""data"":""" + Data + """}"
'get a reference to the request-stream, and write the postData to it
Using s As IO.Stream = request.GetRequestStream()
Using sw As New IO.StreamWriter(s)
sw.Write(postData)
End Using
End Using
'get response-stream, and use a streamReader to read the content
Using s As IO.Stream = request.GetResponse().GetResponseStream()
Using sr As New IO.StreamReader(s)
'decode jsonData with javascript serializer
Dim jsonData = sr.ReadToEnd()
Stop
End Using
End Using
Но, это только дает мне содержание веб-страницы на https://www.google.com/recaptcha. Не то, что я хочу. Google page не очень полезен, и я застрял на том, куда идти. Мне нужна помощь либо при вызове службы проверки Google, либо если кто-то нашел другой способ сделать это из ASP.NET.
Второй ответ работал для меня. Если вы сработали для вас, тогда вы можете выбрать один из них как правильный, чтобы будущие люди могли узнать, какое решение использовать. Просто предложение :) – Greesemonkey3