URL: Username with @

163

为了在URL中发送用户名和密码,我们使用以下格式:

http://username:password@www.my_site.com

但我的用户名是 my_email@gmail.com
问题出在 @ 符号上。

我该怎么解决呢?


10
@ 编码为 %40 - Marc B
6
请勿在 URL 中包含密码,否则可能会意外地尝试通过 HTTP 访问该 URL(您正在这样做),这意味着在您50米范围内拥有 Wireshark 的任何人都可以获得您的密码和用户名。 - HoldOffHunger
在用户名中使用URL编码的问题在于HTTP客户端在将用户名发送到服务器之前必须对其进行解码。虽然浏览器似乎做得很好,但很多HTTP客户端不支持(因此不能正常工作)。考虑到现在已经是2021年,这个问题非常混乱。 - Pawel Veselov
3个回答

239

您需要将 @ 编码为 %40。


2
很好。如果您的密码中包含@,这也适用于由密码管理器创建的随机密码,这种情况越来越普遍。 - Adambean
1
我必须对除字母数字外的所有字符都这样处理吗?例如,如果我的用户名是 name.lastname@mail.com ,我的密码是 abc!@#,我应该使用 name%2Elastname%40mail%2Ecomabc%21%40%23 吗? - m4l490n

26

只需执行:

 http://my_email%40gmail.com:password@www.my_site.com

我很惊讶问题出在用户名中的@字符,而不是密码——通常这是我在url授权或路径部分遇到保留字符的地方。

要解决特殊字符的一般情况:只需用F12打开Chrome控制台,然后粘贴encodeURIComponent(str),其中str是您的密码(或用户名),然后使用编码结果来形成带有密码的URL。

或者只需运行下面的代码片段并将其转储到此处。

Put Url here
<br/>
<input type='text' id='urlEncodeField' style="width:250px" value='my_email@gmail.com' />
<input type='button' value='Click' onClick="console.log(encodeURIComponent(document.getElementById('urlEncodeField').value))" />

希望这能为您节省一些时间。


21

使用%40代替@符号进行URL编码的用户名。这样做可以正确传递它。


现在这个很好用,因为Bitbucket不再允许使用普通的用户名,而是要求使用username@example.org格式的用户名。 - Jeroen Wiert Pluimers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接