В C # можно ли открыть URL в фоновом режиме, не открывая браузер?

Мой код должен предоставить некоторую информацию на сервер через скрипт php.

В основном хочу позвонитьwww.sitename.com/example.php?var1=1&var2=2&var3=3 но я нене хочу, чтобы браузер открылся, такProcess.Start(URL); победил'т работа.

Поскольку я захожу на этот сайт, чтобы узнать, а не получить ответы, в основном я объясню, что яя уже сделал и ошибки, которые я получил. Если вы все равно знаете решение, не стесняйтесь пропустить следующую часть.

Я посмотрел вокруг, и я увидел решение для использования POST:

ASCIIEncoding encoding=new ASCIIEncoding();
string postData="var1=1&var2=2&var3=3";
byte[]  data = encoding.GetBytes(postData);

// Prepare web request...
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://localhost/site.php");
myRequest.Method = "POST";
myRequest.ContentType="application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
Stream newStream=myRequest.GetRequestStream();

// Send the data.
newStream.Write(data,0,data.Length);
newStream.Close();

Тем не менее, я требую использованияGET неPOST, Сначала я подумал, что решение может быть изменитьmyRequest.Method = "POST"; вGET, но это нене работает, потому что этоне какGET работает, он тянет данные с URL.

Итак, я попытался изменить предыдущий код на:

HttpwebRequest myRequest= (HttpWebRequest)WebRequest.Create("http://localhost/site.php" + postData);
Stream newStream = myRequest.GetRequestStream();
newStream.Close()

Под логикой, что это будет называть URL, который (надеюсь) инициирует запрос GET_ на скрипт php, и тогда жизнь будет денди. Это, однако, привело к следующей ошибке:

A first chance exception of type 'System.Net.ProtocolViolationException' occurred in System.dll
An unhandled exception of type 'System.Net.ProtocolViolationException' occurred in System.dll
Additional information: Cannot send a content-body with this verb-type.

Любая помощь приветствуется, и спасибо.

Ответы на вопрос(3)

string postData="var1=1&var2=2&var3=3";

// Prepare web request...
HttpwebRequest myRequest= (HttpWebRequest)WebRequest.Create(
    "http://localhost/site.php?" + postData);

// Send the data.
myRequest.GetResponse();

Обратите внимание, что ямы добавили? в конце .site.php

Мы нене нужно возиться с потоком запросов, так каквсе о размещении вещей в теле запроса - и как высказал,GET запрос имеет свои данные в URL, а не в его теле.

 DarkSquirrel4214 июн. 2013 г., 15:15
хотя это очень распространено и будет работать примерно в 99,9% всех возможных случаев, это не то, как HTTP должен был функционировать ... RFC2616 Раздел 9.1.1 заявляет "что методы GET и HEAD НЕ ДОЛЖНЫ иметь значение действия, кроме поиска »
string postData="var1=1&var2=2&var3=3";
// Prepare web request...
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(
                    "http://yourserver/site.php?" + postData);
myRequest.Method = "GET";
var resp =(HttpWebResponse) myRequest.GetResponse();

var result = new StreamReader(resp.GetResponseStream()).ReadToEnd();   

var data = new WebClient().DownloadString("http://yourserver/site.php?var1=1&var2=2&var3=3");

УвидетьWebClient класс для большего количества вариантов

 rene14 июн. 2013 г., 15:32
Если вы используетеобманщик Вы можете видеть, какие вызовы выполняются через системный прокси.
 echolocation14 июн. 2013 г., 16:39
Я нашел проблему. Чтобы попасть наhttp://yourserver/site.php Мне нужна аутентификация через центральный сервер аутентификации. Поэтому, когда я пытаюсь получить доступ к сайту, он сначала перенаправляет меня на аутентификацию. Знаете ли вы как-нибудь обойти это, учитывая, что у меня есть правильное имя пользователя и пароль? Спасибо за любую помощь
 echolocation14 июн. 2013 г., 15:20
для вашего первого решения Visual Studio 2012 выдает и ошибки и основные моментыStream newStream = myRequest.GetRequestStream();  для второго решения ошибка не выдается, но страница php неКажется, что-нибудь зарегистрировать.

WebClient учебный класс. Используя это это 'Всего 2 строки кода, просто укажите свой URL и используйте методы, подобные.DownloadString

Ваш ответ на вопрос