Ошибка HTTP 400. Глагол запроса недопустим при использовании TcpClient - PullRequest
0 голосов
/ 28 апреля 2018

Я использую Visual Studio 2017 и VC # и пытаюсь подключиться к серверу

Если я использую веб-браузер с этим URL:

http://win8pc:6062/lookup/1

Я получаю ответ, подобный этому:

<Response>
     <Error>Transaction 1 is found.</Error>
</Response>

Итак, сервер работает правильно.

Но когда я пытаюсь подключиться из приложения windows.forms, сделав это:

string server = "win8pc";
int iport = 6062;
try
{
    TcpClient client = new TcpClient(server, iport);

    // Translate the passed message into ASCII and store it as a Byte array.
    string message = "http://win8pc:6062/lookup/1";
    Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);

    // Get a client stream for reading and writing.
    NetworkStream stream = client.GetStream();

    // Send the message to the connected TcpServer. 
    stream.Write(data, 0, data.Length);

    // Receive the TcpServer.response.
    // Buffer to store the response bytes.
    data = new Byte[1024];

    // String to store the response ASCII representation.
    String responseData = String.Empty;

    // variable to store bytes received.
    Int32 bytes = 0;

    // Read the first batch of the TcpServer response bytes.
    do
    {
        bytes = stream.Read(data, 0, data.Length);
        if (bytes > 0)
            responseData += System.Text.Encoding.ASCII.GetString(data, 0, bytes);
    } while (bytes > 0);

    // Close everything.
    stream.Close();
    client.Close();
}
catch (ArgumentNullException e)
{
    Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
    Console.WriteLine("SocketException: {0}", e);
}

Ответ, который я получаю в responseData:

HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 26 Apr 2018 23:02:25 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>

Что мне не хватает?

С уважением rubenc

1 Ответ

0 голосов
/ 28 апреля 2018

Поскольку сервер сообщает вам свой код ответа "Bad Request", вы не отправляете правильный HTTP-запрос . Типичный HTTP-запрос GET выглядит следующим образом:

GET /url HTTP/1.1
Host: www.servername.com
Accept: image/gif, image/jpeg, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Каждая строка выше должна заканчиваться парой возврата каретки и перевода строки (\r\n), а весь запрос должен заканчиваться пустой строкой (\r\n).

Тем не менее, вы почти наверняка не должны кодировать это сами , если это не чисто учебное упражнение. Вместо этого воспользуйтесь встроенным WebRequest API или чем-то подобным. В наше время HTTP является «первоклассным гражданином», так сказать, во многих средах программирования, включая C # / .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...