Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
951
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
941
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1726
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
UrlEncode через консольное приложение?
Обычно я бы просто использовал:
HttpContext.Current.Server.UrlEncode("url");
Но так как это консольное приложение, то HttpContext.Current всегда будет null .
Есть ли другой метод, который делает то же самое, что я мог бы использовать?
Я не .NET парень, но, может быть, вы используете:
HttpUtility.UrlEncode Method (String)
Который описан здесь:
HttpUtility.UrlEncode метод (строка) на MSDN
Код от Яна Хопкинса делает этот трюк для меня, не добавляя ссылку на System.Web. Вот порт на C# для тех, кто не использует VB.NET:
/// <summary>
/// URL encoding class. Note: use at your own risk.
/// Written by: Ian Hopkins (http://www.lucidhelix.com)
/// Date: 2008-Dec-23
/// (Ported to C# by t3rse (http://www.t3rse.com))
/// </summary>
public class UrlHelper
{
public static string Encode(string str) {
var charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"));
return Regex.Replace(str,
String.Format("[^{0}]", charClass),
new MatchEvaluator(EncodeEvaluator));
}
public static string EncodeEvaluator(Match match)
{
return (match.Value == " ")?"+" : String.Format("%{0:X2}", Convert.ToInt32(match.Value[0]));
}
public static string DecodeEvaluator(Match match) {
return Convert.ToChar(int.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber)).ToString();
}
public static string Decode(string str)
{
return Regex.Replace(str.Replace('+', ' '), "%[0-9a-zA-Z][0-9a-zA-Z]", new MatchEvaluator(DecodeEvaluator));
}
}
Я сам столкнулся с этой проблемой, и вместо того, чтобы добавить System.Web assembly в свой проект, я написал класс для кодирования/декодирования URLs (это довольно просто, и я провел некоторое тестирование, но не очень много). Я включил исходный код ниже. Пожалуйста: оставьте комментарий вверху, если вы повторно используете это, не вините Меня, если он сломается, учитесь из кода.
''' <summary>
''' URL encoding class. Note: use at your own risk.
''' Written by: Ian Hopkins (http://www.lucidhelix.com)
''' Date: 2008-Dec-23
''' </summary>
Public Class UrlHelper
Public Shared Function Encode(ByVal str As String) As String
Dim charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"))
Dim pattern = String.Format("[^{0}]", charClass)
Dim evaluator As New MatchEvaluator(AddressOf EncodeEvaluator)
' replace the encoded characters
Return Regex.Replace(str, pattern, evaluator)
End Function
Private Shared Function EncodeEvaluator(ByVal match As Match) As String
' Replace the " "s with "+"s
If (match.Value = " ") Then
Return "+"
End If
Return String.Format("%{0:X2}", Convert.ToInt32(match.Value.Chars(0)))
End Function
Public Shared Function Decode(ByVal str As String) As String
Dim evaluator As New MatchEvaluator(AddressOf DecodeEvaluator)
' Replace the "+"s with " "s
str = str.Replace("+"c, " "c)
' Replace the encoded characters
Return Regex.Replace(str, "%[0-9a-zA-Z][0-9a-zA-Z]", evaluator)
End Function
Private Shared Function DecodeEvaluator(ByVal match As Match) As String
Return "" + Convert.ToChar(Integer.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber))
End Function
End Class
Кибби предлагает настоящий ответ. Да, HttpUtility.UrlEncode-это правильный метод, но он не будет доступен по умолчанию для консольного приложения. Вы должны добавить ссылку на System.Web. Сделать это,
- В вашем решении explorer щелкните правой кнопкой мыши ссылки
- Выберите "add reference"
- В диалоговом окне "Add Reference" используйте вкладку .NET
- Прокрутите вниз до System.Web, выберите его и нажмите ok
NOW вы можете использовать метод UrlEncode. Вы все равно захотите добавить,
использование System.Web
в верхней части вашего консольного приложения или используйте полное пространство имен при вызове метода,
System.Web.HttpUtility.UrlEncode(someString)
Лучше всего добавить ссылку на System.web..dll
и использовать ВАР EncodedUrl=System.Web.HttpUtility.UrlEncode("URL_TEXT");
Вы можете найти файл по адресу System.web.dll
Uri.EscapeUriString не следует использовать для экранирования строки, передаваемой в URL, поскольку она не кодирует все символы, как можно было бы ожидать. "+"- Это хороший пример, который не ускользает. Это затем преобразуется в пробел в URL, так как это то, что он означает в простом URI. Очевидно, что это вызывает огромные проблемы в ту минуту, когда вы пытаетесь передать что-то вроде базовой 64-кодированной строки в URL, и пробелы появляются по всей строке на приемном конце.
Вы можете использовать HttpUtility.UrlEncode и добавить необходимые ссылки в свой проект (и если вы общаетесь с веб-приложением, то я не вижу причин, почему бы вам этого не сделать).
В качестве альтернативы используйте Uri.EscapeDataString вместо Uri.EscapeUriString, как очень хорошо объяснено здесь: https://stackoverflow.com/a/34189188/7391