web-dev-qa-db-ja.com

Gitプロキシパスワードの@文字をエスケープする

'http.proxy = http:// userIdとしてgit proxy configがあります:pwd @ 123@ipaddress:port 'しかし、リモートプロジェクトのクローンを作成中に、

Cloning into git...
error: Couldn't resolve proxy '123@ipaddress' while accessing http://git.kernel.org/pub/scm/git/git.git/info/refs

fatal: HTTP request failed

パスワードの「@」文字をエスケープする方法は?

Pls注:パスワードを変更できません。

71
Karthik

プロキシURLでパスワードを渡す場合は、@記号のURLエンコード値を使用してみます。

http.proxy=http://userId:pwd%40123@ipaddress:port
131
John Weldon

注(2013年11月)

URL(特にパスワードの特殊文字)をエンコードするのが適切なソリューションです。
.netrc以下に記載されているのは、リモートリポジトリURLのみであり、リモートリポジトリURLの解決に使用されるプロキシではありません。

上記のエンコーディングについては、「 Percent-encoding 」を参照してください。

パーセントエンコーディングは、URL encoding とも呼ばれ、 Uniform Resource Identifier (URI)特定の状況下。 URLエンコードとして知られていますが、実際には、メイン Uniform Resource Identifier (URI)セット内でより一般的に使用され、両方 Uniform Resource Locator (URL)および Uniform Resource Name (URN)。そのため、application/x-www-form-urlencoded media type のデータの準備にも使用されます。これは、 [〜#〜] html [〜#〜]form の提出 [〜#〜] http [〜#〜] リクエストのデータ。

パーセントエンコード後の予約文字:

!   #   $    &   '   (   )   *   +   ,   /   :   ;   =   ?   @   [   ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

元の回答(2011年5月)

2つのコメント:

  • http(httpsではなく)でアクセスされるサーバーのパスワードを持っているのは...奇妙です。クライアントとサーバー間の通信中、パスワードは暗号化されません。

  • .netrc(または_netrc for Windows)で$HOME、次のコンテンツ

 machine ipaddress:port 
 login userId 
 password pwd @ 

Gitがシーンの背後で使用するカールは、エンコーディングをうまく処理します。@または@

54
VonC

異常な文字はURLエンコードします。

RLコードのリスト

@ character is %40

私のgit configファイルでは、たとえばユーザー名を「ちょうど」エンコードしています:

https://myemail%[email protected]/api.git
5
conal_lab24

たとえば、環境変数GIT_PASSWORD、ユーザー名-GIT_USERNAMEに保存されているパスワードは、次のようになります。

git clone http://${GIT_USERNAME}:$(echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %)@repository.git

説明:echo -n $GIT_PASSWORD | hexdump -v -e '"x" 1/1 "%02X"' | tr x %

  1. パスワードを印刷:$GIT_REPOSITORY <-hello
  2. 'hello'を16進数に変換:hello <-x68x65x6Cx6Cx6F
  3. 各「x」を「%」に変更します:x68x65x6Cx6Cx6F <-%68%65%6C%6C%6F
1
isnullxbh

percent-encode | エンコード 特殊文字。例えば。これの代わりに:

http://foo:B@[email protected]:80

あなたはこれを書く:

http://foo:B%[email protected]:80

したがって、@%40に置き換えられます。

1
Ravi Parekh