Смекни!
smekni.com

Отправка запроса методом POST на сервер из .NET приложения

Христофоров Юрий

Задача: требуется из Windows .NET приложения отправить POST запрос на сервер и получить результат работы запрошенного методом POST скрипта. Предусмотреть ситуацию, при которой скрипт на сервере защищен Basic авторизацией.

Ниже приведен пример на C# для решения данной задачи.

C# код:

// необходимые библиотеки

using System;

using System.Web;

using System.Collections;

using System.Text;

using System.IO;

using System.Net;

using System.Data;

// ......

WebResponse result = null;

WebRequest req = null;

Stream newStream = null;

Stream ReceiveStream = null;

StreamReader sr = null;

try

{

// Url запрашиваемогометодом POST скрипта

req = WebRequest.Create("http://www.servername.com/script.cgi");

req.Method = "POST";

req.Timeout = 120000;

// эта строка необходима только при защите скрипта на сервере Basic авторизацией

//req.Credentials = new NetworkCredential("login", "password");

req.ContentType = "application/x-www-form-urlencoded";

byte[] SomeBytes = null;

// передаем список пар параметров / значений для запрашиваемого скрипта методом POST

// в случае нескольких параметров необходимо использовать символ & для разделения параметров

// в данном случае используется кодировка windows-1251 для Url кодирования спец. символов значения параметров

SomeBytes = Encoding.GetEncoding(1251).GetBytes("ParamName1=" + HttpUtility.UrlEncode("ParamValue1", Encoding.GetEncoding(1251)));

req.ContentLength = SomeBytes.Length;

newStream = req.GetRequestStream();

newStream.Write(SomeBytes, 0, SomeBytes.Length);

newStream.Close();

// считываемрезультатработы

result = req.GetResponse();

ReceiveStream = result.GetResponseStream();

Encoding encode = Encoding.GetEncoding(1251);

sr = new StreamReader( ReceiveStream, encode );

Char[] read = new Char[256];

int count = sr.Read( read, 0, 256 );

string strOut = "";

while (count > 0)

{

String str = new String(read, 0, count);

strOut += str;

count = sr.Read(read, 0, 256);

}

Console.WriteLine("Результат работы запрошенного методом POST скрипта: " + strOut);

}

catch (Exception ex)

{

Console.WriteLine("Ошибка: "+ex.Message);

}

finally

{

if (newStream != null)

newStream.Close();

if (ReceiveStream != null)

ReceiveStream.Close();

if (sr != null)

sr.Close();

if (result != null)

result.Close();

}