0

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

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

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。

4

2 回答 2

1

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

它失败的电子邮件的格式带有前导 < 符号:

<arq.l@us.army.mil

这是合法电子邮件地址的开始,因此您需要了解可以格式化地址的多种方式。该规范并不简单,也没有简单的方法来检查有效的,所以我建议从 Wikipedia 的“电子邮件地址”文章开始,然后从那里跳到 RFC,其中RFC-5322涵盖了地址。最好的答案总是尝试一下,看看;如果您想知道它是否有效,请向该地址发送一条消息,请求使用您生成的已知令牌进行响应。如果您收到包含该令牌的用户的响应,那么您就知道它是有效的。

由于它是失败的 API,因此很明显它不是为满足互联网标准而编写的。找到一个更好的 API 来使用。

当我尝试在代码参数之外的 StackOverflow 上键入电子邮件时,它会自动隐藏 < 符号之后的所有内容。

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

如果您不希望浏览器这样做,那么您必须编码<&lt;或使用其等效的数字实体。

于 2013-09-20T15:39:57.313 回答
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
于 2013-09-20T15:37:23.003 回答