Декодировать форму urlencoded uTF8 в C#
-
12-10-2019 - |
Вопрос
Редактировать Я бы неправильно понял, что здесь происходило ... есть отправка пост, затем получить результат, а затем строка URL, которую я вижу, является частью строки запроса ... поэтому я не могу декодировать то, что это На самом деле, так как это кодируется людьми платежных шлюзов, а не я.
Я хотел бы декодировать строку URL
Вот код:
private string SubmitXml(string InputXml)
{
string result = InputXml.ToString();
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(_WebServiceUrl);
webReq.Method = "POST";
byte[] reqBytes;
reqBytes = System.Text.Encoding.UTF8.GetBytes(InputXml);
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.ContentLength = reqBytes.Length;
webReq.Timeout = 5000;
Stream requestStream = webReq.GetRequestStream();
requestStream.Write(reqBytes, 0, reqBytes.Length);
requestStream.Close();
HttpWebResponse webResponse = (HttpWebResponse)webReq.GetResponse();
Вот inputxml:
- <GenerateRequest>
<PxPayUserId>KoruCareCHCH_Dev</PxPayUserId>
<PxPayKey>47d99ccdcae54816ecd78c9a80f8878c466a7ed829480e59d421cc4c456cbd93</PxPayKey>
<AmountInput>345.00</AmountInput>
<BillingId />
<CurrencyInput>NZD</CurrencyInput>
<DpsBillingId />
<DpsTxnRef />
<EmailAddress />
<EnableAddBillCard />
<MerchantReference>43</MerchantReference>
<TxnData1 />
<TxnData2 />
<TxnData3 />
<TxnType>Purchase</TxnType>
<TxnId>43</TxnId>
<UrlFail>http://localhost:1527/Auction/PurchaseTickets.aspx</UrlFail>
<UrlSuccess>http://localhost:1527/Auction/PurchaseTickets.aspx</UrlSuccess>
<Opt />
</GenerateRequest>
Вот URL
Проблема: Как декодировать запрос на URL = blahblah обратно в XML
Я делаю это, чтобы попытаться доказать, что содержится в строке URL (это должно быть как XML выше!)
Решение
Не удалось декодировать его, поэтому URL может быть неправильным, но я использовал этот код:
Uri uri = new Uri(...);
NameValueCollection query = HttpUtility.ParseQueryString(uri.Query);
string value = query["request"].Replace('-', '+').Replace('_', '/');
Debug.WriteLine(Convert.FromBase64String(value));
РЕДАКТИРОВАТЬ: В своих документах они говорят, что это зашифровано.
Другие советы
Вы можете использовать регулярность, что -то вроде
var match = new Regex("request=(?<key>[^&]+)").Match(url);
и захватить значение запроса в названной группе. Оттуда, надеюсь, вы сможете расшифровать захваченную ценность.
Нет гарантий, что вышеупомянутая регуляция верна - я не проверил его. Это должно, по крайней мере, указывать вам в правильном направлении!