使用WebClient的POST查询字符串

本文关键字:查询 字符串 POST WebClient 使用 | 更新日期: 2023-09-27 18:21:17

我想使用WebClient但使用POST方法执行QueryString

这就是我到目前为止得到的

代码:

using (var client = new WebClient())
{
    client.QueryString.Add("somedata", "value");
    client.DownloadString("uri");
}

它正在工作,但不幸的是,它使用的是GET而不是POST,我希望它使用POST的原因是我正在进行web抓取,这就是我在WireShark中看到的请求的方式。[它使用POST作为一种方法,但没有POST数据,只有查询字符串。]

使用WebClient的POST查询字符串

回答您的具体问题:

client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
byte[] response = client.UploadData("your url", "POST", new byte[] { });
//get the response as a string and do something with it...
string s = System.Text.Encoding.Default.GetString(response);

但使用WebClient可能是一种PITA,因为它不接受cookie,也不允许您设置超时。

这将帮助您使用WebRequest而不是WebClient

using System;
using System.Net;
using System.Threading;
using System.IO;
using System.Text;
class ThreadTest
{
    static void Main()
    {
        WebRequest req = WebRequest.Create("http://www.yourDomain.com/search");
        req.Proxy = null;
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        string reqString = "searchtextbox=webclient&searchmode=simple"; 
        byte[] reqData = Encoding.UTF8.GetBytes(reqString); 
        req.ContentLength = reqData.Length;
        using (Stream reqStream = req.GetRequestStream())
            reqStream.Write(reqData, 0, reqData.Length);
        using (WebResponse res = req.GetResponse())
        using (Stream resSteam = res.GetResponseStream())
        using (StreamReader sr = new StreamReader(resSteam)) 
            File.WriteAllText("SearchResults.html", sr.ReadToEnd());
        System.Diagnostics.Process.Start("SearchResults.html");
    }
}