В 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 not 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. 

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

 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 для получения дополнительных параметров.

Похоже, вы спустились по правильному маршруту:

 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 .

Нам не нужно возиться с streamом запросов, так как все дело в том, чтобы поместить вещи в тело запроса – и, как вы уже сказали, запрос GET имеет свои данные в URL-адресе, а не в его теле.

Самый простой способ – использовать class WebClient . Используя его, это всего лишь 2 строки кода, просто укажите URL-адрес и используйте такие методы, как DownloadString .