如何通过win forms将数据发布到网站c#

Posted

技术标签:

【中文标题】如何通过win forms将数据发布到网站c#【英文标题】:How to Post Data to a website through win forms c# 【发布时间】:2012-12-04 11:48:07 【问题描述】:

我有一个 api,我可以在其中发布一些数据并提交,然后获取发布的数据是否有效。此 api 重定向到指示成功/失败的不同 url。 为此我通常做的是,在 html 标签中调用目标 url 并提交页面:

    <form method="post" action="https://web.tie.org/verify.php" name="main">
<table  border="0" cellpadding="0" cellspacing="0" align="center" valign="top">
    <tr>
        <td class="normal">&nbsp;</td><td class="normal"><input type='text' class='text' name='Email' value='x@hotmail.com' size='15' maxlength='35'></td>
    </tr>
</table>
</form>
<script language='javascript'>

document.forms[0].submit();

</script>

有没有办法通过winforms c#直接发布数据。 我希望能够在发布后访问成功/失败 url 并获取重定向站点的查询字符串。

参考enter link description here我已经尝试过发布,但我需要结果查询字符串。

现在我可以通过以下方式实现:

webBrowser1.Url = new Uri("C:\\Documents and Settings\\Admin\\Desktop\\calltie.html");            
webBrowser1.Show();

【问题讨论】:

【参考方案1】:

是的,你可以使用 WebClient 类。

public static string PostMessageToURL(string url, string parameters)

    using (WebClient wc = new WebClient())
    
        wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        string HtmlResult = wc.UploadString(url,"POST", parameters);
        return HtmlResult;
    

例子:

PostMessageToURL("http://tempurl.org","query=param1&query2=param2");

【讨论】:

PostMessageToURL 方法返回结果 :) My PostMessageToURL("tempurl.org","query=param1&query2=param2"); 反过来重定向到:query=param1 并附加到该查询字符串。我需要重定向的查询字符串来提取激活状态。例如,成功将重定向到 param1?valid=yes&exp=a 。我想知道什么是有效的并且 exp 等于 @Pavitar,请参阅下面我更新的答案,您需要拉出 responseUri。我不确定 WebClient 是否为您提供了足够的详细信息来阅读这样的标题。 这取决于请求的url如何重定向到新页面。通过调用javascript函数? 304方法o将位置设置为标题? 这个FieldInfo responseField = webclient.GetType().GetField("m_WebResponse", BindingFlags.Instance | BindingFlags.NonPublic); 成功了。 :)【参考方案2】:

当然,看看WebRequest,这里有一个完整的例子

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

然后你就可以做这种事情了

UriBuilder uriBuilder = new UriBuilder(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriBuilder.Uri);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = bytesToPost.Length;

using(Stream postStream = request.GetRequestStream())

     postStream.Write(bytesToPost, 0, bytesToPost.Length);
     postStream.Close();


HttpWebResponse response = (HttpWebResponse )request.GetResponse();
string url = response.ResponseUri

最后一行将为您提供您所追求的 URL(成功/失败)

【讨论】:

【参考方案3】:

我目前正在处理它..这是运行代码尝试它..

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("www.linktoposton.php");
        req.Method = "POST";
        byte[] byteArray = Encoding.UTF8.GetBytes(content);
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = byteArray.Length;
        Stream dataStream = req.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        WebResponse response = req.GetResponse();
        dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = HttpUtility.UrlDecode(reader.ReadToEnd());
        reader.Close();
        dataStream.Close();
        response.Close();
        Application.DoEvents();   // optional

只需将Httpwebrequest中的url(“www.linktoposton.php”更改为您要发送的链接)

【讨论】:

以上是关于如何通过win forms将数据发布到网站c#的主要内容,如果未能解决你的问题,请参考以下文章

如何修改查询表达式以获得灵活的结果 - Win Forms C#

如何通过 Web.config 或 C# 将所有内容重定向到 https://www。网站的版本?

如何使用 c# 将单个 html 行绑定到 xamarin.forms 中的多个标签

C#问题 锁定WinForm窗口大小

(c# form) datagridview怎么写入数据库

C# MVC .Net Core Form,强类型化的Form,无法使用(404错误)。