1

QueryStringusing WebClientを実行したいが、POST メソッドを使用する

それは私がこれまでに得たものです

コード:

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

それは機能していますが、残念ながら POST ではなく GET を使用しています。POST を使用したい理由は、Web スクレイピングを行っているためです。これが、WireShark で見られるように要求が行われる方法です。[メソッドとして POST を使用しますが、クエリ文字列のみの POST データは使用しません。]

4

2 に答える 2

1

これは役に立ちます。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");

    }

}
于 2013-07-07T19:01:41.757 に答える
1

あなたの特定の質問への答えとして:

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 を使用すると、Cookie を受け入れず、タイムアウトを設定できないため、PITA になる可能性があります。

于 2013-07-07T19:22:17.063 に答える