【问题标题】:How to post HTML form from server side?如何从服务器端发布 HTML 表单?
【发布时间】:2012-04-19 07:39:03
【问题描述】:

我想从服务器端 (ASP.NET/C#) 发布此表单:

<FORM action="https://login:password@payment.architrade.com/cgi-adm/refund.cgi" method=POST>
    <input type="hidden" name="merchant" value="12345678">
    <input type="hidden" name="transact" value="11111111">
    <input type="hidden" name="amount" value="2000">
    <input type="hidden" name="currency" value="208">
    <input type="hidden" name="orderid" value="11223344">
    <input type="hidden" name="md5key" value="cfcd208495d565ef66e7dff9f98764da">
    <input type="hidden" name="textreply" value="yes">
</FORM>

我正在尝试使用 WebClient.UploadValues。我的代码是

 private void PostRefundRequest(Mediachase.Commerce.Orders.Payment payment)
    {
        WebClient webClient = new WebClient();
        NameValueCollection refundRequest = new NameValueCollection();
        PaymentMethodDto dibs = PaymentManager.GetPaymentMethodBySystemName("DIBS", SiteContext.Current.LanguageName);
        string merchant = GetParameterByName(dibs, DIBSPaymentGateway.UserParameter).Value;
        PurchaseOrder po = payment.Parent.Parent as PurchaseOrder;
        string orderid = po.TrackingNumber;
        string transact = payment.TransactionID;
        string amount = (payment.Amount * 100).ToString();
        refundRequest.Add("merchant", merchant);
        refundRequest.Add("transact", transact);
        refundRequest.Add("amount", amount );

        refundRequest.Add("currency", payment.Parent.Parent.BillingCurrency);
        refundRequest.Add("orderid", orderid);
        string md5 = GetMD5KeyRefund(merchant, orderid, transact, amount);
        refundRequest.Add("md5key", md5);
        refundRequest.Add("textreply", "yes");
        byte[] responseArray = webClient.UploadValues("https://<mylogin>:<mypassword>@payment.architrade.com/cgi-adm/refund.cgi", refundRequest);
    }

我尝试调试,一切似乎都正确,但 API 返回 HTTP 401(未经授权)。我关心的是:WebClient.UploadValues 是否支持 API 的 url(包括用户名/密码)

谢谢。

【问题讨论】:

  • 我强烈建议您编辑问题,让一些字段用于保护该信息(md5key?)
  • @YoryeNathan : 这是 DIBS 的演示形式,完全无害 :)
  • 看看这个q/a,你会找到你需要的所有代码;)stackoverflow.com/questions/793755/…
  • 首先,向我们展示您尝试运行的代码。
  • 我更新了问题,请看一下:)

标签: c# asp.net html forms post


【解决方案1】:

UploadValues 必须有 Post in 方法参数:

NameValueCollection data = new NameValueCollection();
data["input-data1"] = "value1";
data["input-data2"] = "value2";
data["input-data3"] = "value3";

WebClient webClient = new WebClient();
webClient.Credentials = new NetworkCredential(mylogin, mypassword);
byte[] responseBytes = webClient.UploadValues("http://www.example.com/posttome.aspx", "POST", data);
string response = Encoding.UTF8.GetString(responseBytes);

更新:也许这还不够,因为在文档中声明 POST 是 http 方案的默认设置 (http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx) 我认为 https 也是如此

更新 2:出于安全原因,Microsoft 在 Internet Explorer (http://support.microsoft.com/kb/834489) 的 URL 中禁用了该身份验证,因此 Web 客户端可能已禁用该身份验证

【讨论】:

  • 我添加了 POST 方法,但没有运气:)
  • 可能出于安全原因被故意禁用,请参阅我的答案更新
  • 您是否尝试使用 NetworkCredential 类而不是 url 用户名密码? msdn.microsoft.com/en-us/library/…
【解决方案2】:

只需为表单提供一个 ID 并使用以下代码提交

 $('#formid').submit();

【讨论】:

猜你喜欢
  • 2011-10-20
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
相关资源
最近更新 更多