我正在用reCaptcha.net打一堵墙
一些背景 - 我正在使用从http://code.google.com/p/recaptcha/downloads/list?q=label:aspnetlib-Latest获得的reCaptcha-dotnet v1.0.5。
我能够开发一个网站,并通过reCaptcha验证使其在本地工作。当我将它部署到服务器(该站点托管在1and1.com上)时,我收到以下错误 -
操作已超时
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.Net.WebException:操作已定时 出
我已经检查了谷歌论坛,建议让服务器允许来自端口80的出站连接。我试图向1and1.com的支持人员解释这个,但我认为他根本没有线索。
除了上述内容之外,还有什么我可以通过代码来解决这个问题吗?有没有人为此找到解决方案?
欣赏任何建议!
答案 0 :(得分:1)
这是我用于邮件配置的代码和用于1and1上托管的网站的Recaptcha代理:
1- Web.config(只有放在那里才有效!)
<system.net>
<mailSettings>
<smtp from="mail@domain.com">
<network host="smtp.1and1.com" port="25" userName="mymail@domain.com" password="mypassword"/>
</smtp>
</mailSettings>
<defaultProxy>
<proxy usesystemdefault = "false" bypassonlocal="false" proxyaddress="http://ntproxyus.lxa.perfora.net:3128" />
</defaultProxy>
</system.net>
2-在mycontroller中的专门动作中:
// ouside the action I've defined the response
private class gapi {public bool success{get;set;}}
public bool SendMail(string firstname, string lastname, string email, string message, string grecaptcha)
{
SmtpClient smtp = new SmtpClient("smtp.1and1.com");
MailMessage mail = new MailMessage();
mail.From = new MailAddress(email);
mail.To.Add("mail@domain.com");
mail.Subject = firstname + " " + lastname;
mail.Body = message;
try
{
using (var client = new WebClient())
{
var values = new NameValueCollection();
values["secret"] = "6LcEnQYTAAAAAOWzB44-m0Ug9j4yem9XE4ARERUR";
values["response"] = grecaptcha;
values["remoteip"] = Request.UserHostAddress;
var response = client.UploadValues("https://www.google.com/recaptcha/api/siteverify","POST", values);
bool result = Newtonsoft.Json.JsonConvert.DeserializeObject<gapi>((Encoding.Default.GetString(response) as string)).success;
if(!result) return "Something is wrong)";
}
//... verify that the other fields are ok and send your mail :)
smtp.Send(mail);
}
catch (Exception e) { return "Something is wrong)"; }
return "Okey :)";
}
希望这有帮助。
答案 1 :(得分:0)
终于得到了解决方案,我从1and1获得了正确的代理服务器地址并使用了它。 reCaptcha现在很有用。
另外,由于某种原因,使用reCaptcha控件的IWebProxy属性在代码中设置代理值不起作用。我不得不在web.config下添加标签。