29

C# でライブラリ WebClient、HttpResponse、および HttpRequest を使用するのは初めてなので、私の質問がわかりにくい場合はご容赦ください。

基本認証で保護された URL を開くことができる C# に基づいて WinForm を構築する必要があります。次のように、これをヘッダーに追加してこれを行いました。

using (WebClient wc = new WebClient())
{
    wc.Headers.Add(HttpRequestHeader.Authorization, "Basic " +
    Convert.ToBase64String(
    Encoding.ASCII.GetBytes(username + ":" + password)));
}

ここまでは順調ですね!フォームに数字を入力したいのですが、サイトからソースコードを見つけて、名前が「数字」であることを発見しました。だから私はこれを書きます:

NameValueCollection formData = new NameValueCollection();  
formData["number"] = number
byte[] responseBytes = wc.UploadValues(theurl, "POST", formData);
string response = Encoding.ASCII.GetString(responseBytes);
textBox_HTML.Text = response; 

でもこれどうやって提出するの?「検索結果」を受け取りたいのですが...

4

6 に答える 6

44

これを試して:

using System.Net;
using System.Collections.Specialized;  

NameValueCollection values = new NameValueCollection();
values.Add("TextBox1", "value1");
values.Add("TextBox2", "value2");
values.Add("TextBox3", "value3");
string Url = urlvalue.ToLower();

using (WebClient client = new WebClient())
{
    client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
    byte[] result = client.UploadValues(Url, "POST", values);
    string ResultAuthTicket = System.Text.Encoding.UTF8.GetString(result);
}
于 2012-04-27T10:44:19.843 に答える
3

私は自分の問題の解決策を見つけました。まず第一に、http-communication の基本のいくつかについて混乱しました。これは、私が書いた python-script が原因で、通信とは異なるアプローチをとっています。

POST-data をゼロから生成して解決し、form-action に含まれていた uri を開きました。

于 2009-04-29T06:15:08.013 に答える
1

BFreeの答えはうまくいきます。ただし、データの連結は実際にはURLエンコードする必要があることに注意してください。そうしないと、データ内の「=」や「&」記号などの問題が発生します。

urlencodedでUTF-8をサポートするVB.NETバージョンを以下に示します(url-encodingにはSystem.Web.dllへの参照が必要です。これは、.NET 4CompactFrameworkから通常のに切り替えた後にのみ機能しました。 NET 4 Framework)。

Imports System.Web
Imports System.Net
Imports System.IO

Public Class WebFormSubmitter

    Public Shared Function submit(ByVal address As String,
                                  ByVal values As Dictionary(Of String, String)) As String
        Dim encoding As New UTF8Encoding
        Dim postData As String = getPostData(values:=values)
        Dim data() As Byte = encoding.GetBytes(postData)

        Dim request = CType(WebRequest.Create(address), HttpWebRequest)
        request.Method = "POST"
        request.ContentType = "application/x-www-form-urlencoded"
        request.ContentLength = data.Length
        Dim newStream = request.GetRequestStream()
        newStream.Write(data, 0, data.Length)
        newStream.Close()

        Dim response = request.GetResponse()
        Dim responseStream = response.GetResponseStream()
        Dim responseReader = New StreamReader(responseStream)
        Return responseReader.ReadToEnd()
    End Function

    Private Shared Function getPostData(ByVal values As Dictionary(Of String, String)) As String
        Dim postDataPairList As New List(Of String)
        For Each anEntry In values
            postDataPairList.Add(anEntry.Key & "=" & HttpUtility.UrlEncode(anEntry.Value))
        Next
        Return String.Join(separator:="&", values:=postDataPairList)
    End Function

End Class
于 2011-11-07T02:29:13.857 に答える
1

System.Net.Http.HttpClient を使用してフォームを投稿し、応答を文字列として読み取る:

var formData = new Dictionary<string, string>();
formData.Add("number", number);

var content = new FormUrlEncodedContent(formData);

using (var httpClient = new HttpClient())
{
    var httpResponse = await httpClient.PostAsync(theurl, content);

    var responseString = await httpResponse.Content.ReadAsStringAsync();
}
于 2015-04-18T21:06:32.410 に答える
0

で既に提出していUploadValuesます。問題は、「結果検索」とは何ですか? ページは何を返しますか? HTML? その場合、HTML Agility Packは、html を解析する最も簡単な方法です。

于 2009-04-27T14:45:06.150 に答える