none
SocketStream 与80端口通信的时候获取Header问题 RRS feed

  • 问题

  • 代码:

    HostName^ hostname;

    hostname = ref new HostName("ericye.in");

    StreamSocket^ osk = ref new StreamSocket();

    CoreApplication::Properties->Insert("connected_lekan", osk);

    task<void>(osk->ConnectAsync(hostname,L"80", SocketProtectionLevel::PlainSocket)).then([this] (task<void> previousTask)

        {

                previousTask.get();

    StreamSocket^ socket = dynamic_cast<StreamSocket^>(CoreApplication::Properties->Lookup("connected_lekan"));

    DataWriter^ socket_write = ref new DataWriter(socket->OutputStream);

    String^ write_string_new = ref new String(L"GET /css/layout.css HTTP/1.0\r\nHost: ericye.in\r\nUser-Agent: Win8\r\n\r\n");

    socket_write->WriteUInt32(socket_write->MeasureString(write_string_new));

    socket_write->WriteString(write_string_new);

    task<unsigned int>(socket_write->StoreAsync()).then([this, socket, write_string_new] (task<unsigned int> writeTask){

    try

    {

    DataReader^ res = ref new DataReader(socket->InputStream);

    uint32 stringLength= 1024;

    task<unsigned int>(res->LoadAsync(1024)).then([this, res, stringLength] (unsigned int actualStringLength)

    {

    byte by = res->ReadByte();

    String^ data = res->ReadString(res->UnconsumedBufferLength);

    return;

    });

    }

    catch (Exception^ exception)

    {

    return;

    }

        });

    });

    通过上面的代码能获取网页正文。但是无法获取Header信息。

    谢谢

    2012年9月28日 9:59

答案

  • StreamSocket 以TCP/IP形式发送请求,并且你的代码是GET /css/layout.css HTTP1.0

    对不起,我这里的网络不允许直接StreamSocket 到你测试的这个站点,我只能测试自己域内的站点,返回如下面的这个错误信息,是包含HTTP response头的:

    TTP/1.1 400 Bad Request
    Content-Type: text/html; charset=us-ascii
    Server: Microsoft-HTTPAPI/2.0
    Date: Mon, 01 Oct 2012 06:59:38 GMT
    Connection: close
    Content-Length: 326
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
    <HTML><HEAD><TITLE>Bad Request</TITLE>
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
    <BODY><h2>Bad Request - Invalid Verb</h2>
    <hr><p>HTTP Error 400. The request verb is invalid.</p>
    </BODY></HTML>


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Eric_00101 2012年10月8日 10:09
    2012年10月1日 6:59
    版主

全部回复

  • StreamSocket 以TCP/IP形式发送请求,并且你的代码是GET /css/layout.css HTTP1.0

    对不起,我这里的网络不允许直接StreamSocket 到你测试的这个站点,我只能测试自己域内的站点,返回如下面的这个错误信息,是包含HTTP response头的:

    TTP/1.1 400 Bad Request
    Content-Type: text/html; charset=us-ascii
    Server: Microsoft-HTTPAPI/2.0
    Date: Mon, 01 Oct 2012 06:59:38 GMT
    Connection: close
    Content-Length: 326
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
    <HTML><HEAD><TITLE>Bad Request</TITLE>
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
    <BODY><h2>Bad Request - Invalid Verb</h2>
    <hr><p>HTTP Error 400. The request verb is invalid.</p>
    </BODY></HTML>


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Eric_00101 2012年10月8日 10:09
    2012年10月1日 6:59
    版主
  • 您好。您上面的信息是如何获取到的?

    这是我用DataReader 读取到的数据。是没有Header的

    <html>
    <head><title>400 Bad Request</title></head>
    <body bgcolor="white">
    <center><h1>400 Bad Request</h1></center>
    <hr><center>nginx/0.8.54</center>
    </body>
    </html>

    2012年10月6日 15:17
  • 自己顶一下~~希望版主帮帮~~~
    2012年10月8日 3:10