无效电子邮件的API查找失败,因为<标志?

时间:2013-09-20 14:29:08

标签: ruby api email url

我在CSV文件中有大约100,000个电子邮件地址。每个都与会员ID相关联。

我有一个API调用,允许我通过电子邮件查找成员ID,但是,它不允许我查找格式不正确的电子邮件。为了解决这个问题,我试图跳过特定的错误:当发送格式不正确的电子邮件时,API会返回400错误,所以这是我的代码:

url = HTTParty.get("#{base_uri}#{call}",
  :basic_auth => auth,
  :headers => {'Accept' => 'application/json' } )
if url.code == 400 
  puts "400"
  next
else
  .....

这在很大程度上起作用。它似乎循环遍历列表,直到它到达某个电子邮件,然后每次都失败。它失败的电子邮件的格式为前导<

<arq.l@us.army.mil

当它到达时,脚本停止而不是puts "400"。它在API调用时失败,并且没有做任何事情,我无法弄清楚原因。

作为旁注,当我尝试在code参数之外的StackOverflow上键入电子邮件时,它会自动隐藏<符号之外的所有内容。这可能与它有关吗?我觉得<符号在代码中被传达为我不知道的东西。

我使用的是Ruby 1.9.3。

2 个答案:

答案 0 :(得分:1)

我不知道你的其余代码,但如果你在方法中有这个,你可以添加这个:

def do_work
  url = HTTParty.get("#{base_uri}#{call}",
    :basic_auth => auth,
    :headers => {'Accept' => 'application/json' } )
  if url.code == 400 
    puts "400"
    next
  else
    # more code...
rescue => e
  puts e
end

捕获任何可能冒出的异常,它可能有错误的描述。 <字符是HTML / XML标记的左括号,因此它可能正在检查该值并失败。

您也可以在begin rescue end块中包装特定的代码块:

begin
  # sketchy code here...
rescue => e
  puts e
end

答案 1 :(得分:1)

您需要学习一些技术:SMTP和电子邮件地址,HTML以及浏览器如何显示它们。

  

它失败的电子邮件格式为前导&lt;签名:

<arq.l@us.army.mil

这是合法电子邮件地址的开头,因此您需要了解地址可以格式化的无数方式。规范并不简单,也没有简单的方法来检查有效的,所以我建议从维基百科的“Email address”文章开始,然后从那里跳到RFC,{{3}覆盖地址。最好的答案总是尝试并看到;如果您想知道它是否有效,请发送一条消息,询问您已生成的已知令牌的响应。如果您收到包含该令牌的用户的回复,那么您就知道它是有效的。

由于它的API失败了,很明显它不符合互联网标准。找到一个更好的API来使用。

  

当我尝试在代码参数之外的StackOverflow上键入电子邮件时,它会自动隐藏所有超过&lt;登录。

<标记HTML标记的开头,因此浏览器会关闭输出,直到确定标记已结束。通常在找到匹配>时会发生这种情况,但浏览器可以使用其他启发式方法来决定何时放弃。

如果您不希望浏览器执行此操作,则必须将<编码为&lt;或使用其等效的数字实体。