C# 从网页捕获帖子

C# 从网页捕获帖子,c#,html,C#,Html,我正在制作一个小程序,从我的网页上检索帖子 在我的页面中,我有一个带有两个文本框和一个“提交”按钮的表单 在我的c#中,我拥有使页面在服务器上运行的代码。 如何使网页用户按下按钮时,我可以从网页中获取帖子数据,并通过控制台显示给用户。Writeline() 有人能解释一下我是如何做到这一点的吗 从我的服务器加载网页的代码: static HttpListener _listener = new HttpListener(); static Stream _ouput; public stati

我正在制作一个小程序,从我的网页上检索帖子

在我的页面中,我有一个带有两个文本框和一个“提交”按钮的表单

在我的c#中,我拥有使页面在服务器上运行的代码。 如何使网页用户按下按钮时,我可以从网页中获取帖子数据,并通过
控制台显示给用户。Writeline()

有人能解释一下我是如何做到这一点的吗

从我的服务器加载网页的代码:

static HttpListener _listener = new HttpListener();
static Stream _ouput;

public static void StartListening()
{
    //create new Httplistener
    string localPrefix = "http://localhost:8000/";
    _listener.Prefixes.Add(prefix);
    _listener.Prefixes.Add(localPrefix);

    _listener.Start();
    Console.WriteLine("Listening....");
}

public static void GetContext()
{
    // De GetContext methode blokkeert terwijl die wacht op een aanvraag(request)
    HttpListenerContext context = _listener.GetContext();
    HttpListenerRequest request = context.Request;

    HttpListenerResponse response = context.Response;
    string html = Properties.Resources.index;

    byte[] buffer = Encoding.UTF8.GetBytes(html);

    response.ContentLength64 = buffer.Length;
    _ouput = response.OutputStream;
    _ouput.Write(buffer, 0, buffer.Length);
}

public static void StopListening()
{
    _ouput.Close();
    _listener.Close();
}
编辑 经过一些评论,我已经完成了我的代码。一个小问题是,我的html表单没有提交表单的内容


如何让我的javascript提交数据,以及如何用我的c#code捕获数据?您可以使用
HttpListenerRequest
并检查方法类型是否为
POST

HttpListenerContext context = _listener.GetContext();
HttpListenerRequest request = context.Request;

if ( request.HttpMethod == "POST" )
{

}

您可以在客户端使用jQueryAjax调用读取并显示POST数据,如图所示。假设您的输入字段id为input1和input2,submit按钮的id=submitBtn。您可以这样做smth:

$(window).load(function () {            // after browser has loaded win
   $('#submitBtn').click(function() {   // add button click handler
        var inp1 = $('#input1').val();  // get value from input 1
        var inp2 = $('#input2').val();  // get value from input 2
                $.ajax({                // send ajax POST request on server
                    url: "http://localhost:8000/",
                    type: "POST",
                    data: {input1:inp1 , input2:inp2}, 
                }).done(function () {
                    ...your logic on success
                    ...for example - location.reload();
                }).fail(function (err) {
                    alert(err.statusText);
                });
    });
});
不要忘记将Jquery库包含到html文档中

smth like <script src=".../jquery.min.js">
smth-like

好的,首先是的您可以使用代码捕获数据。 但是你的htmlListener有一个小问题。这是一个一次性函数,我的意思是你只能连接一次

你可以这样做:

public bool Listening = true;

public static void GetContext()
{
    while (Listening)
    {
        // De GetContext methode blokkeert terwijl die wacht op een aanvraag(request)
        HttpListenerContext context = _listener.GetContext();
        HttpListenerRequest request = context.Request;

        HttpListenerResponse response = context.Response;
        string html = Properties.Resources.index;

        byte[] buffer = Encoding.UTF8.GetBytes(html);

        response.ContentLength64 = buffer.Length;
        _ouput = response.OutputStream;
        _ouput.Write(buffer, 0, buffer.Length);
    }
}
HttpListenerContext httpContext = _listener.GetContext();
HttpListenerRequest httpRequest = context.Request;

if ( request.HttpMethod == "POST" )
{

}
<html>
    <head>
        <script language="javascript">
            var delayrec = {};
            function delay(callback, id, calldelay) {
                clearTimeout(delayrec[id]);
                delayrec[id] = setTimeout(callback, calldelay);
            }

            function verzenden(event) {
                var keycode = document.getElementById("form_keycode");

                if (event.keyCode == 125 || event.keyCode == 113) {                   
                    keycode.value = 125;
                }
                else if (event.keyCode == 126 || event.keyCode == 115) {                    
                    keycode.value = 126;
                }

                delay(function () {
                    document.myform.submit();
                }, "submitlocatie", 500);
            }

            function load() {
                var locatie = document.getElementById("locatie");
                var bonregel = document.getElementById("bonregel");
                if (locatie.value == "")
                    locatie.focus();
                else
                    bonregel.focus();
            }

            $(document).keydown(function (eventObject) {
                alert(eventObject.keyCode);
            });



        </script>
    </head>
    <body onload="load()">
        <div class="wrapper">
            <fieldset>
                <legend> test</legend><br />
                <form name="myform" action="/" method="post">
                    <input type="hidden" id="keycode" name="keycode" />
                    <table>
                        <tr>
                            <td>Text1:</td>
                            <td><input type="text" id="textfield1" name="textfield1" onkeyup="verzenden(event)" /></td>
                        </tr>
                        <tr>
                            <td>Text2:</td>
                            <td><input type="text" id="textfield2" name="textfield2" onkeyup="verzenden(event)" /></td>
                        </tr>
                    </table>
                </form>
                <p id="errorSection">{errorSection}</p>
            </fieldset>
        </div>
    </body> 
</html>
然后,如果您使用数据并使用try-catch,那么如果存在异常,您可以将bool设置为false,或者您可以继续该函数,使其退出循环

您可以通过以下方式获取数据:

public bool Listening = true;

public static void GetContext()
{
    while (Listening)
    {
        // De GetContext methode blokkeert terwijl die wacht op een aanvraag(request)
        HttpListenerContext context = _listener.GetContext();
        HttpListenerRequest request = context.Request;

        HttpListenerResponse response = context.Response;
        string html = Properties.Resources.index;

        byte[] buffer = Encoding.UTF8.GetBytes(html);

        response.ContentLength64 = buffer.Length;
        _ouput = response.OutputStream;
        _ouput.Write(buffer, 0, buffer.Length);
    }
}
HttpListenerContext httpContext = _listener.GetContext();
HttpListenerRequest httpRequest = context.Request;

if ( request.HttpMethod == "POST" )
{

}
<html>
    <head>
        <script language="javascript">
            var delayrec = {};
            function delay(callback, id, calldelay) {
                clearTimeout(delayrec[id]);
                delayrec[id] = setTimeout(callback, calldelay);
            }

            function verzenden(event) {
                var keycode = document.getElementById("form_keycode");

                if (event.keyCode == 125 || event.keyCode == 113) {                   
                    keycode.value = 125;
                }
                else if (event.keyCode == 126 || event.keyCode == 115) {                    
                    keycode.value = 126;
                }

                delay(function () {
                    document.myform.submit();
                }, "submitlocatie", 500);
            }

            function load() {
                var locatie = document.getElementById("locatie");
                var bonregel = document.getElementById("bonregel");
                if (locatie.value == "")
                    locatie.focus();
                else
                    bonregel.focus();
            }

            $(document).keydown(function (eventObject) {
                alert(eventObject.keyCode);
            });



        </script>
    </head>
    <body onload="load()">
        <div class="wrapper">
            <fieldset>
                <legend> test</legend><br />
                <form name="myform" action="/" method="post">
                    <input type="hidden" id="keycode" name="keycode" />
                    <table>
                        <tr>
                            <td>Text1:</td>
                            <td><input type="text" id="textfield1" name="textfield1" onkeyup="verzenden(event)" /></td>
                        </tr>
                        <tr>
                            <td>Text2:</td>
                            <td><input type="text" id="textfield2" name="textfield2" onkeyup="verzenden(event)" /></td>
                        </tr>
                    </table>
                </form>
                <p id="errorSection">{errorSection}</p>
            </fieldset>
        </div>
    </body> 
</html>
对于Javascript部分,只需保持简洁即可。我用过这样的方法:

public bool Listening = true;

public static void GetContext()
{
    while (Listening)
    {
        // De GetContext methode blokkeert terwijl die wacht op een aanvraag(request)
        HttpListenerContext context = _listener.GetContext();
        HttpListenerRequest request = context.Request;

        HttpListenerResponse response = context.Response;
        string html = Properties.Resources.index;

        byte[] buffer = Encoding.UTF8.GetBytes(html);

        response.ContentLength64 = buffer.Length;
        _ouput = response.OutputStream;
        _ouput.Write(buffer, 0, buffer.Length);
    }
}
HttpListenerContext httpContext = _listener.GetContext();
HttpListenerRequest httpRequest = context.Request;

if ( request.HttpMethod == "POST" )
{

}
<html>
    <head>
        <script language="javascript">
            var delayrec = {};
            function delay(callback, id, calldelay) {
                clearTimeout(delayrec[id]);
                delayrec[id] = setTimeout(callback, calldelay);
            }

            function verzenden(event) {
                var keycode = document.getElementById("form_keycode");

                if (event.keyCode == 125 || event.keyCode == 113) {                   
                    keycode.value = 125;
                }
                else if (event.keyCode == 126 || event.keyCode == 115) {                    
                    keycode.value = 126;
                }

                delay(function () {
                    document.myform.submit();
                }, "submitlocatie", 500);
            }

            function load() {
                var locatie = document.getElementById("locatie");
                var bonregel = document.getElementById("bonregel");
                if (locatie.value == "")
                    locatie.focus();
                else
                    bonregel.focus();
            }

            $(document).keydown(function (eventObject) {
                alert(eventObject.keyCode);
            });



        </script>
    </head>
    <body onload="load()">
        <div class="wrapper">
            <fieldset>
                <legend> test</legend><br />
                <form name="myform" action="/" method="post">
                    <input type="hidden" id="keycode" name="keycode" />
                    <table>
                        <tr>
                            <td>Text1:</td>
                            <td><input type="text" id="textfield1" name="textfield1" onkeyup="verzenden(event)" /></td>
                        </tr>
                        <tr>
                            <td>Text2:</td>
                            <td><input type="text" id="textfield2" name="textfield2" onkeyup="verzenden(event)" /></td>
                        </tr>
                    </table>
                </form>
                <p id="errorSection">{errorSection}</p>
            </fieldset>
        </div>
    </body> 
</html>

var delayrec={};
函数延迟(回调、id、calldelay){
clearTimeout(delayrec[id]);
delayrec[id]=setTimeout(回调,calldelay);
}
功能verzenden(事件){
var keycode=document.getElementById(“form_keycode”);
如果(event.keyCode==125 | | event.keyCode==113){
keycode.value=125;
}
else如果(event.keyCode==126 | | event.keyCode==115){
keycode.value=126;
}
延迟(函数(){
document.myform.submit();
}“提交地点”,500);
}
函数加载(){
var locatie=document.getElementById(“locatie”);
var bonregel=document.getElementById(“bonregel”);
如果(locatie.value==“”)
locatie.focus();
其他的
bonregel.focus();
}
$(文档).keydown(函数(eventObject){
警报(eventObject.keyCode);
});
测试
正文1: 文本2:

{errorSection}

我使用keyCode事件发送数据,并取消发送


我希望这会有所帮助,祝你好运

这可能会对你有所帮助:Thx用于链接,但当我点击网页上的提交按钮时,我的c#程序中没有收到任何数据。@HuyHoangPham你能帮我吗?我已经编辑了你的标题。请看,“,其中的共识是“不,他们不应该”。我认为简单的JS在mu方面会更容易。你知道,创建JQuery的主要原因之一是因为它更容易!试试看,你会没事的是的,我明白,但我必须使用像ie5这样的旧浏览器